• Mobile Services 提交批量数据


    Mobile Services批量提交数据,參考了文章:Inserting multiple items at once in Azure Mobile Services。里面事实上已经介绍得比較清楚了。但因为是英文。并且有些地方交待得不清楚。也没有Android的演示样例。故下文以Android版本号的开发为例作个补充。

    首先在Mobile Services项目里新建AllToDoItems以及ToDoItem表。点击AllToDoItems,再点击script标签。将里面的内容替换例如以下:

    function insert(item, user, request) {
        var table = tables.getTable('ToDoItem');
        populateTable(table, request, item.todos);
    }
    
    function populateTable(table, request, films) {
        var index = 0;
        films.forEach(changeReleaseDate);
        var insertNext = function () {
            if (index >= films.length) {
                request.respond(201, { id: 1, status: 'Table populated successfully' });
            } else {
                var toInsert = films[index];
                table.insert(toInsert, {
                    success: function () {
                        index++;
                        if ((index % 20) === 0) {
                            console.log('Inserted %d items', index);
                        }
     
                        insertNext();
                    }
                });
            }
        };
     
        insertNext();
    }
     
    function changeReleaseDate(obj) {
        var releaseDate = obj.ReleaseDate;
        if (typeof releaseDate === 'string') {
            releaseDate = new Date(releaseDate);
            obj.ReleaseDate = releaseDate;
        }
    }

    服务端的工作到此完毕。

    client新建两个类。分别例如以下:

    package com.example.ecodriveiot;
    
    /**
     * Represents an item in a ToDo list
     */
    public class ToDoItem {
    
    	/**
    	 * Item text
    	 */
    	@com.google.gson.annotations.SerializedName("text")
    	private String mText;
    
    	/**
    	 * Item Id
    	 */
    	@com.google.gson.annotations.SerializedName("id")
    	private String mId;
    
    	/**
    	 * Indicates if the item is completed
    	 */
    	@com.google.gson.annotations.SerializedName("complete")
    	private boolean mComplete;
    
    	/**
    	 * ToDoItem constructor
    	 */
    	public ToDoItem() {
    
    	}
    
    	@Override
    	public String toString() {
    		return getText();
    	}
    
    	/**
    	 * Initializes a new ToDoItem
    	 * 
    	 * @param text
    	 *            The item text
    	 * @param id
    	 *            The item id
    	 */
    	public ToDoItem(String text, String id) {
    		this.setText(text);
    		this.setId(id);
    	}
    
    	/**
    	 * Returns the item text
    	 */
    	public String getText() {
    		return mText;
    	}
    
    	/**
    	 * Sets the item text
    	 * 
    	 * @param text
    	 *            text to set
    	 */
    	public final void setText(String text) {
    		mText = text;
    	}
    
    	/**
    	 * Returns the item id
    	 */
    	public String getId() {
    		return mId;
    	}
    
    	/**
    	 * Sets the item id
    	 * 
    	 * @param id
    	 *            id to set
    	 */
    	public final void setId(String id) {
    		mId = id;
    	}
    
    	/**
    	 * Indicates if the item is marked as completed
    	 */
    	public boolean isComplete() {
    		return mComplete;
    	}
    
    	/**
    	 * Marks the item as completed or incompleted
    	 */
    	public void setComplete(boolean complete) {
    		mComplete = complete;
    	}
    
    	@Override
    	public boolean equals(Object o) {
    		return o instanceof ToDoItem && ((ToDoItem) o).mId == mId;
    	}
    }
    

    package com.example.ecodriveiot;
    
    public class AllToDoItems {
    	@com.google.gson.annotations.SerializedName("id")
    	public String id;
    	public String status;
    	public ToDoItem[] todos;
    }
    

    批量提交的代码例如以下:

    ToDoItem item = new ToDoItem();
    
    		item.setText("test");
    		item.setComplete(false);
    		
    		
    		ToDoItem[] items = new ToDoItem[2];
    		items[0]=item;
    		items[1]=item;
    		// Insert the new item
    		/*mToDoTable.insert(item, new TableOperationCallback<ToDoItem>() {
    
    			public void onCompleted(ToDoItem entity, Exception exception, ServiceFilterResponse response) {
    				
    				if (exception == null) {
    					if (!entity.isComplete()) {
    						mAdapter.add(entity);
    					}
    				} else {
    					createAndShowDialog(exception, "Error");
    				}
    
    			}
    		});*/
    		AllToDoItems allToDoItems = new AllToDoItems();
    		allToDoItems.todos=items;
    		mClient.getTable(AllToDoItems.class).insert(allToDoItems, new TableOperationCallback<AllToDoItems>() {
    
    			public void onCompleted(AllToDoItems entity, Exception exception, ServiceFilterResponse response) {
    				
    				if (exception == null) {
    					Log.i("Debug", "status:"+entity.status);
    				} else {
    					createAndShowDialog(exception, "Error");
    				}
    			}
    		});

    上面的代码事实上是在sdk demo的基础上改的,mClient的初始化自己加上就可以。其它client的开发事实上是类似的,能够查看英文原文。当然,里面的ToDoItem[] todos可以改变的ArrayList<ToDoItem> todos。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    vue2.x 时间范围 date range timepicker。只在项目中使用elementUI的date-picker
    FE 命令随笔
    [one day one question] 有没有免费接收短信验证用于注册的软件或者平台?
    [one day one question] webpack 打包报错 Cannot assign to read only property 'exports' of object '#<Object>'
    [one day one question] GIF动画为什么只动一次不能循环
    [one day one question] Vue单页面应用如何保证F5强刷不清空数据
    [one day one question] express 不缓存如何实现
    [one day one question] nodejs require 缓存,无法检测文件变化
    [one day one question] Iscroll 5.0 在chrome上无法滑动
    [one day one question] Vue数组变更不能触发刷新
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4652370.html
Copyright © 2020-2023  润新知