我在我的提供商处应用了一批ContentProviderOperations:
ContentProviderResult[] result = resolver.applyBatch(...)
所有内容都按预期工作,数据被插入到数据库中,但如果我想提取id,那么应该是id的uri的最后一个元素始终为null。
这是否发生是因为我已将表的_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)";
如果我查看表格,我可以看到列_ id 和名称,显示的插入数据显示自动增量正常工作。
更新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());
答案 0 :(得分:2)
如果插入(我猜你在数据库中插入一行),result[i].uri
包含新插入行的URI,其中i是操作数组中相应操作的索引。尝试打印此URI,您将看到它是否与真实ID相对应。
如果您的某个操作是UPDATE或DELETE,则相应的结果URI将为null,但result[i].count
将包含更新/删除的行数。
<强>更新强>
我想问题是你在NAME上有一个唯一的索引。也许,你已经插入了一个同名的行?
<强> UPDATE2 强>
问题是ContentProvider中的insert函数没有正确返回id。