当我在列表中“添加”一个新的toDoItem时,该项目不会从当时的本地数据库获得Id(null)。因此,如果您尝试编辑该项目,则会收到错误消息。 另一方面,如果添加新的toDoItem,然后“刷新”列表或编辑其他项目,则添加的新项目将获得Id。 我遵循的例子是:http://azure.microsoft.com/blog/2014/08/07/offline-support-in-azure-mobile-services-android-sdk/ 可能有什么不对?
当我按下“添加”按钮时,我可以创建一个随机ID并在每个ToDoItem中传递它,但我希望数据库在那时为我做。
提前谢谢!
答案 0 :(得分:1)
由于以下原因,可能导致错误。
博客的addItem功能存在错误。当您在本地数据库中插入项目时,它实际上会为其分配一个ID。当你在表上调用insert函数时,它返回一个带有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("");
}