【问题标题】:Azure Mobile Services Android Offline Example - Null Id when inserting in SQLiteLocalStoreAzure 移动服务 Android 离线示例 - 在 SQLiteLocalStore 中插入时的空 ID
【发布时间】:2014-11-12 08:50:32
【问题描述】:
【问题讨论】:
标签:
android
sqlite
azure
azure-mobile-services
【解决方案1】:
该错误可能由以下原因引起。
-
博客的addItem 函数有一个bug。当您在本地数据库中插入一个项目时,它实际上会为其分配一个 ID。当您在表上调用插入函数时,它会返回一个带有 id 的对象。
所以插入 todoItem 应该是这样的。
final ToDoItem entity = mToDoTable.insert(item).get();
addItem 函数的正确版本如下所示
public void addItem(View view) {
if (mClient == null) {
return;
}
// Create a new item
final ToDoItem item = new ToDoItem();
item.setText(mTextNewToDo.getText().toString());
item.setComplete(false);
// Insert the new item
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
final ToDoItem entity = mToDoTable.insert(item).get();
if (!entity.isComplete()) {
runOnUiThread(new Runnable() {
public void run() {
mAdapter.add(entity);
}
});
}
} catch (Exception exception) {
createAndShowDialog(exception, "Error");
}
return null;
}
}.execute();
mTextNewToDo.setText("");
}
- Android SDK (https://github.com/Azure/azure-mobile-services/issues/505) 存在错误。根据您的移动服务和客户端表定义应匹配的内容。当您创建 todoItem 表时,它默认添加“__deleted”列。您可以在客户端中定义该列,也可以将其从 todoItem 表中删除。