Что-то, вероятно, не так с реализацией метода 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(). Что, кажется, здесь не так?




В Switch нет кода обновления. Я думаю ты это пропустил
что-то вроде database.update (DatabaseHelper.TABLE_NAME, values, condition, selectionArgs) .. присутствует только разрыв
перейдите по этой ссылке, чтобы узнать больше о поставщиках контента grokkingandroid.com/…
Оказывается, метод update() никогда не работает внутри моей реализации ContentProvider. Когда я вызываю getContentResolver().update, он напрямую вызывает метод update() в ContentResolver. Однако я также вызываю метод insert() напрямую, но метод insert() проходит мимо моей реализации ContentProvider.
Чтобы получать обновления строк с помощью 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>. Но я почти понял, что вы имели в виду под кодом. Это должно сработать!
Под кодом обновления вы имеете в виду
getContext().getContentResolver().notifyChange()?