ContentProvider update () не работает

Что-то, вероятно, не так с реализацией метода update(), но я не уверен, что это такое:

 @Override
 public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
        int count = 0;
        switch (uriMatcher.match(uri)) {
            case uriCode:
                break;
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
 }

Вот как я называю этот метод:

Random r1 = new Random();
long insertValue1 = r1.nextInt(5);
updatedValues.put(Provider.adPoints, insertValue1);
int value = getContentResolver().update(Provider.CONTENT_URI, updatedValues, null, null); //insert(Provider.CONTENT_URI, values);

Я также хочу использовать count и вернуть количество обновленных строк в update(). Что, кажется, здесь не так?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
53
2

Ответы 2

В Switch нет кода обновления. Я думаю ты это пропустил

Под кодом обновления вы имеете в виду getContext().getContentResolver().notifyChange()?

waseefakhtar 16.03.2018 14:10

что-то вроде database.update (DatabaseHelper.TABLE_NAME, values, condition, selectionArgs) .. присутствует только разрыв

MarGin 16.03.2018 14:13

перейдите по этой ссылке, чтобы узнать больше о поставщиках контента grokkingandroid.com/…

MarGin 16.03.2018 14:16

Оказывается, метод update() никогда не работает внутри моей реализации ContentProvider. Когда я вызываю getContentResolver().update, он напрямую вызывает метод update() в ContentResolver. Однако я также вызываю метод insert() напрямую, но метод insert() проходит мимо моей реализации ContentProvider.

waseefakhtar 16.03.2018 15:54

Чтобы получать обновления строк с помощью Content Provider, вам необходимо сделать следующее:

Сначала убедитесь, что у вас есть ссылка на ваш класс DatabaseHelper в ContentProvider:

private YourDatabaseSQLLiteHelper mDbHelper;

@Override
public boolean onCreate() {
    mDbHelper = new YourDatabaseSQLLiteHelper(getContext());
    return true;
}

Затем переопределите метод update () в вашем контент-провайдере:

@Override
public int update(@NonNull Uri uri, @Nullable ContentValues cv, @Nullable String selection, @Nullable String[] selectionArgs) {
    int rowsUpdated;

    switch (sUriMatcher.match(uri)) {

        case YOUR_TABLE_CODE:

            // This is what you need.
            rowsUpdated = mDbHelper.getWritableDatabase().update(
                    YourTableContract.YourTableEntry.TABLE_NAME,
                    cv,
                    selection,
                    selectionArgs);
            break;

        default:
            throw new UnsupportedOperationException("Unknown uri: " + uri);
    }

    if (rowsUpdated != 0)
        getContext().getContentResolver().notifyChange(uri, null);

    return rowsUpdated;
}

Затем, когда вы вызываете метод, он должен вернуть, сколько строк было обновлено.

int rowsUpdatedCount = getContentResolver().update(...);

Пожалуйста, дайте мне знать, работает ли это для вас.

Извините за то, что не упомянул ранее, но мой ContentProvider не является db. Я использую собственный класс Item, в котором я устанавливаю значения и добавляю их в ContentProvider через ArrayList, например ArrayList<Item>. Но я почти понял, что вы имели в виду под кодом. Это должно сработать!

waseefakhtar 16.03.2018 16:52

Другие вопросы по теме