ContentProvider update()不起作用

时间:2018-03-16 13:01:18

标签: java android android-contentprovider insert-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()中更新的行数。这里看来有什么不对?

2 个答案:

答案 0 :(得分:0)

Switch中没有更新代码。我想你错过了它

答案 1 :(得分:0)

为了使用Content Provider获取行更新,您必须执行此操作:

首先确保您在ContentProvider中引用了DatabaseHelper类:

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(...);

如果这对你有用,请告诉我。