Видалити помилку або успіх з ContentProviderResult []?

Використовуючи contentResolver.delete (uri, null, null) , визначаючи успіх, можна виконати пошук поверненого значення кількості строк.

However, deleting a contact through ContentProviderOperation and applyBatch returns ContentProviderResult[]

Як визначити, чи була операція видалення успішною, чи ні з об'єкта ContentProviderResult ?

Видалити файл не вдалося з ContentProviderOperation?

ArrayList ops =
      new ArrayList();

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] ?
}
6

3 Відповіді

Ви б перевірили поле count для результату та побачили, чи він дорівнює 1. Якщо ви провели операцію у своєму запиті двічі, перший результат повинен дати вам підрахунок 1 (що означає, що один рядок був знищений), а другий результат повинен надати вам підрахунок 0 (вказуючи на те, що рядки не було видалено, оскільки ви його вже видалили).

Правда, операція не збій (отже, не виняток). Запит просто не впливає вдруге.

4
додано
що працює! замість того, щоб дивитися на results.length> 0 або чекати виключення, мені довелося перевірити results [0] .count> 0 (що насправді 3, коли ви успішно видаляєте одну контакт за назвою, мабуть, завдяки наявності списку контактів Google та інших користувачів з таким самим входом).
додано Автор Cel, джерело
У моєму тесті я виконую видалення двічі. Перший раз, коли я очікував 1 видаленого рядка, і другий раз я сподіваюся, що 0, тому що його вже видалено. З якоїсь дивної причини він повертає 1 замість 0 другий раз ... Я видаляю рядок rawContact.
додано Автор Roel, джерело

За документації для методу applyBatch з класу Content Resolver, чи не буде застосована applicationBatch помилка при виконанні будь-якої з операцій?

OperationApplicationException викидається, якщо додаток не працює. Щоб отримати додаткову інформацію, перегляньте застосунок (ContentProvider, ContentProviderResult [], int).

0
додано
Будь ласка, перегляньте коментар до saury, принаймні в моїх обставинах/тестування, я не отримаю виключення (якщо цільового контакту тут немає) ...
додано Автор Cel, джерело
О, добре. Насправді я боюся, що це може бути справа. Баммер
додано Автор Kurtis Nusbaum, джерело

Оскільки ви видаляєте один контакт, то результат повернутого масиву повинен мати однакову довжину. Це підтвердить успіх/невдачу операції

0
додано
Що таке проблема, це не в моєму тестуванні: (1а) Я називаю метод видалення та results.length == 1 (1b) Я маю зовнішній вигляд, і контакт дійсно видаляється в телефоні Контакт (2) Я знову викликаю метод видалення незважаючи на те, що цільовий контакт вже видалено, але він все ще повертає results.length == 1. І ніяких виключень не кинуто ...
додано Автор Cel, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.