使用选择和选择Args而不是URI匹配器

时间:2018-02-17 16:00:23

标签: android android-sqlite uri android-contentprovider android-database

我很困惑,使用URI匹配器的全部意义在于确定我们是要在特定行还是整个表上工作。所以万一我们想要在id" ID"我们将id附加到URI的路径,然后URI匹配器将识别哪种URI模式。

但另一方面,我们可以在没有URI匹配器的情况下执行相同操作,只需将所需的行ID放入查询方法的选择Args中。

所以我的问题是为什么我们需要一个URI匹配器?

      public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
                    String sortOrder) {

    SQLiteDatabase database = petDbHelper.getReadableDatabase();
    Cursor cursor;
    int match = sUriMatcher.match(uri);
    switch (match) {
        case PETS:
            cursor = database.query(PetContract.PetEntry.TABLE_NAME, projection, null, null,
                    null, null, null);
            break;
        case PET_ID:
            selection = PetContract.PetEntry._ID + "=?";
            selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
            cursor = database.query(PetContract.PetEntry.TABLE_NAME, projection, selection, selectionArgs,
                    null, null, sortOrder);
            break;
        default:
            throw new IllegalArgumentException("Cannot query unknown URI " + uri);
    }
    Log.i(TAG, "query: leaving Pet Provider with a cursor");
    return cursor;
}

0 个答案:

没有答案