2

我在我的提供者上应用了一批 ContentProviderOperations:

ContentProviderResult[] result = resolver.applyBatch(...)

一切都按预期工作,数据被插入到数据库中,但是如果我想提取 id(s),则应该是 id 的 uri 的最后一个元素始终为空。

这是因为我已将表的 _id 设置为自动递增(换句话说,如果我不自动递增 id 并用我的代码中的手动 uid 填充它,它会起作用吗)。

如果没有,谁能告诉我是什么导致了这种行为。

更新:这是创建表的字符串:

    private static final String CREATE_TABLE_WORKFLOWSTATES =
        "CREATE TABLE " + Tables.WORKFLOWSTATES + " (" 
        + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + WorkflowStatesColumns.NAME + " TEXT NOT NULL,"
        + "UNIQUE ("+ WorkflowStatesColumns.NAME + ") ON CONFLICT IGNORE)";

如果我查看表格,我可以看到列 _ idname,可见的插入数据表明自动增量工作正常。

更新 2:这就是我构建 ContentProviderOperation 的方式:

这是我的带有 ContentProviderOperations 的 ArrayList(CollectionUtils 是一个自定义类,用于实例化 Arraylist):

ArrayList<ContentProviderOperation> batch = CollectionUtils.newArrayList();

这是实际操作:

batch.add(ContentProviderOperation
    .newInsert(InvoiceContract.addCallerIsSyncAdapterParameter(WorkflowStates.CONTENT_URI))
    .withValue(WorkflowStates.NAME, task.getWFS()).build());
4

1 回答 1

2

在插入的情况下(我猜你在数据库中插入一行),result[i].uri包含新插入行的 URI,其中 i 是操作数组中相应操作的索引。尝试打印此 URI,您将查看它是否对应于真实 id。

如果您的操作之一是 UPDATE 或 DELETE,则相应的结果 URI 将为空,但result[i].count将包含更新/删除的行数。

更新

我想问题是您在 NAME 上有一个唯一索引。也许,您已经插入了同名的行?

更新2

问题是 ContentProvider 中的插入函数没有正确返回 id。

于 2012-11-02T14:45:04.483 回答