【问题标题】:Azure Mobile Services Android Offline Example - Null Id when inserting in SQLiteLocalStoreAzure 移动服务 Android 离线示例 - 在 SQLiteLocalStore 中插入时的空 ID
【发布时间】:2014-11-12 08:50:32
【问题描述】:

当我在列表中“添加”一个新的 toDoItem 时,该项目 当时没有从本地数据库中获得 Id (null)。因此,如果您尝试编辑该项目,您将收到错误消息。 另一方面,如果您添加一个新的 toDoItem,然后“刷新”列表或编辑另一个项目,您添加的新项目将获得一个 Id。 我遵循的示例在这里:http://azure.microsoft.com/blog/2014/08/07/offline-support-in-azure-mobile-services-android-sdk/ 有什么问题?

当我按下“添加”按钮时,我可以创建一个随机 ID 并在每个 ToDoItem 中传递它,但我希望数据库在那时为我做这件事。

提前谢谢你!

【问题讨论】:

    标签: android sqlite azure azure-mobile-services


    【解决方案1】:

    该错误可能由以下原因引起。

    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("");
            }
    
    1. Android SDK (https://github.com/Azure/azure-mobile-services/issues/505) 存在错误。根据您的移动服务和客户端表定义应匹配的内容。当您创建 todoItem 表时,它默认添加“__deleted”列。您可以在客户端中定义该列,也可以将其从 todoItem 表中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多