Mobile Servicesがデータを一括送信
4544 ワード
Mobile Servicesはデータを一括送信し、記事:Inserting multiple items at once in Azure Mobile Servicesを参照しています.中には実ははっきりと紹介されていますが、英語である上、はっきりしないところもあり、Androidの例もないので、以下ではAndroidバージョンの開発を例に補足します.
まずMobile ServicesプロジェクトでAllToDoItemsおよびToDoItemテーブルを新規作成し、AllToDoItemsをクリックし、scriptラベルをクリックして、次のように内容を置き換えます.
サービス側の仕事はこれで終わります.
クライアントは、次の2つのクラスを新規作成します.
バッチ送信のコードは次のとおりです.
上のコードは実はsdk demoの上で変更したので、mClientの初期化は自分で加えればいいです.他のクライアントの開発は実際には似ていて、英語の原文を見ることができます.もちろん、中のToDoItem[]todosはArrayListtodosに変更できます.
まず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;
}
}
サービス側の仕事はこれで終わります.
クライアントは、次の2つのクラスを新規作成します.
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の初期化は自分で加えればいいです.他のクライアントの開発は実際には似ていて、英語の原文を見ることができます.もちろん、中のToDoItem[]todosはArrayList