从ContentProviderResult []删除失败或成功?

时间:2011-10-28 16:09:25

标签: java android contacts android-contentprovider

使用contentResolver.delete(uri, null, null)时,可以通过查看受影响的行数的返回值来确定成功。

但是,deleting a contact through ContentProviderOperation and applyBatch会返回ContentProviderResult[]

如何从ContentProviderResult对象中识别删除操作是否成功

删除是否因ContentProviderOperation而失败?

ArrayList<ContentProviderOperation> ops =
      new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
      .withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
      .build());

ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
if (results != null && results[0] != null) {                            
    // How to extract whether success or failure from results[0] ?
}

3 个答案:

答案 0 :(得分:4)

您将检查结果的计数字段并查看它是否等于1.如果您在问题中运行了两次操作,则第一个结果应该给您一个计数1(表示删除了一行),而第二个Result应该给你一个0的计数(表示没有删除任何行,因为你已经删除了它)。

事实是操作没有失败(因此也不例外)。查询只是第二次没有效果。

答案 1 :(得分:0)

根据Content Resolver类的documentation for the applyBatch method,如果任何操作失败,applyBatch是否会抛出错误?

  

如果应用程序失败,则抛出OperationApplicationException。有关更多信息,请参阅apply(ContentProvider,ContentProviderResult [],int)。

答案 2 :(得分:0)

由于您要删除一个联系人,因此返回的数组的结果应该是相同的长度。这将验证操作是否成功