Intereting Posts
Изменение макета при изменении ориентации во время выполнения фрагмента без воссоздания представления Как установить пользовательский шрифт для диалогового окна предупреждения в Android? В чем разница между панелью действий и новой панелью инструментов? Возможно autoupdating в Android без использования рынка Android? Управление проектами android из командной строки Интеграция jpct-ae с процессором Vuforia от Qualcomm в Android OnOptionsItemSelected в деятельности вызывается перед onOptionsItemSelected в фрагменте. Другой способ? Multipeer Возможности подключения: iOS и Android Функция сна в программе Android Greendao удалить из db и сеанса Есть ли причина продолжать использовать IntentService для обработки сообщений GCM? Как добавить номер в значок запуска, например, по почте HTC? Загрузка Android-ресурса в WebView DatePicker.setMinDate (long minDate) бросает IllegalArgumentException: время не между Android: проверьте, существует ли значение в общих настройках

Вызов метода удаления в пользовательском контенте

Я изучаю Android, и я застрял в проблеме, связанной с вызовом специального поставщика контента. Я использую пример в учебной книге, и хотя он описывает, как создать настраиваемый поставщик, нет ясного примера, как вызвать в нем определенные методы. Я специально изучаю, как удалить одну запись из пользовательского поставщика контента.

Вот код для настраиваемого поставщика контента ( EarthquakeProvider.java ):

 @Override public int delete(Uri uri, String where, String[] whereArgs) { int count; switch (uriMatcher.match(uri)) { case QUAKES: count = earthquakeDB.delete(EARTHQUAKE_TABLE, where, whereArgs); break; case QUAKE_ID: String segment = uri.getPathSegments().get(1); count = earthquakeDB.delete(EARTHQUAKE_TABLE, KEY_ID + "=" + segment + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs); break; default: throw new IllegalArgumentException("Unsupported URI: " + uri); } getContext().getContentResolver().notifyChange(uri, null); return count; } 

Я пытаюсь вызвать метод удаления из основного действия для удаления одной записи, а не всей базы данных. Я хочу использовать об OnLongClickListener для выбранной записи, которая отображается в виде списка массивов в основном OnLongClickListener .

Это то, что я придумал, до сих пор в своей основной деятельности для этого метода:

 earthquakeListView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView _av, View _v, int _index, long arg3) { ContentResolver cr = getContentResolver(); cr.delete(earthquakeProvider.CONTENT_URI, null, null); return false; } 

Я знаю, что приведенный выше код не работает, но это как можно ближе к моему пониманию.

Любая помощь по этому поводу была бы очень оценена.

Solutions Collecting From Web of "Вызов метода удаления в пользовательском контенте"

 cr.delete(earthquakeProvider.CONTENT_URI, null, null); 

Это твоя проблема. Во-первых, некоторый контекст:

Контентные URI: ( источник )

 content://authority/path/## 

Номер в конце является необязательным. Если присутствует, URI ссылается на определенную строку в базе данных, где row._id = (число). Если отсутствует, он ссылается на таблицу в целом.

Вызов delete () принимает URI, предложение where и набор строк, которые заменяются. Пример: Скажем, у вас есть база данных людей.

 cr.delete( Person.CONTENT_URI, "sex=? AND eyecolor=?", new String[]{"male", "blue"}); 

Будет искать весь стол человека и удалять кого-либо, чей секс является мужчиной и цвет глаз которого синий.

Если предложение where и где значения равны нулю, то вызов delete () будет соответствовать каждой строке в таблице . Это вызывает поведение, которое вы видите.

Существует два способа указать нужную строку:

Первый вариант, вы можете добавить номер в URI:

 cr.delete( EarthquakeProvider.CONTENT_URI.buildUpon().appendPath(String.valueOf(_id)).build(), null, null); 

Это ограничивает URI определенной строкой, и путь будет через ваш case QUAKE_ID: и поэтому будет удалять только одну строку независимо от того, что.

Второй вариант, вы можете использовать предложение where:

 cr.delete(EarthquakeProvider.CONTENT_URI, "_id=?", String.valueOf(_id))); 

В любом случае, вы ограничите удаление одной строкой, как вам нужно. Последнее относится к более красивому коду, но первый из них более эффективен из-за того, как работают ContentProvider и ContentObservers.

В качестве последнего примечания: в ContentProvider вам необходимо добавить вызов ContentResolver.notifyChange (Uri uri, ContentObserver observer, boolean syncToNetwork). Это помогает уведомлять курсоры о повторной выборке запроса базы данных и помогает в автоматизации с автоматизацией.