SQLite selectionArgs不起作用

时间:2017-10-29 23:11:33

标签: android sqlite android-contentprovider

我的内容提供商遇到了一些奇怪的问题:selectionArgs拒绝为特定列工作。

插入

void saveFile(File file, Cursor cursor, Context context) {
    if (file.isDirectory()) {
        throw new IllegalArgumentException(file.getName() + " must be a file");
    }

    values.put(IS_DIRECTORY, false);
    // Some other values.put()
    context.getContentResolver().insert(FolderContract.CONTENT_URI, values);
}

void saveFolder(File file, String filesNum, Context context, int directTracks) {
        if (!file.isDirectory()) {
            throw new IllegalArgumentException(file.getName() + " must be a directory");
        }

        ContentValues values = new ContentValues();
        values.put(IS_DIRECTORY, true);
        // Some other values.put()
        context.getContentResolver().insert(FolderContract.CONTENT_URI, values);
}

我的查询

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Timber.w("onCreateLoader: ");
        String selection = String.format("%s = ? AND %s = ?",  FolderContract.IS_DIRECTORY, FolderContract.PARENT_ID);
        String[] selectionArgs = selectionArgs = new String[]{"0", args.getString(FOLDER_PATH)};
        return new CursorLoader(getActivity(), FolderContract.CONTENT_URI, null, selection, selectionArgs, null);
    }

我希望查询返回FolderContract.PARENT_ID列= args.getString(FOLDER_PATH)的行,而FolderContract.IS_DIRECTORY列则为false。

但是上面的查询返回零结果但是如果我在选择中没有FolderContract.IS_DIRECTORY的情况下运行它会返回所有匹配 结果。奇怪的是,如果我遍历游标,一些返回的行的FolderContract.IS_DIRECTORY列为0,而  其他人是1。

的ContentProvider

@Override
    public Uri insert(@NonNull Uri uri, ContentValues values) {
        final SQLiteDatabase database = dbHelper.getWritableDatabase();
        long insertedRowId = database.insert(FolderContract.TABLE_NAME, null, values);
        if (insertedRowId > -1) {
            Uri insertedUri = ContentUris.withAppendedId(CONTENT_URI, insertedRowId);
            getContext().getContentResolver().notifyChange(insertedUri, null);
            return insertedUri;
        }

        database.close();
        return uri;
    }


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

        final SQLiteDatabase database = dbHelper.getReadableDatabase();
        Cursor cursor = database.query(FolderContract.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
        cursor.setNotificationUri(getContext().getContentResolver(), uri);
        return cursor;
    }

请知道我做错了什么?

0 个答案:

没有答案