Подтвердить что ты не робот

Как добавить предложение ограничения с помощью поставщика контента

Есть ли способ ограничить количество строк, возвращаемых поставщиком контента? Я нашел это решение, однако это не сработало для меня. Все строки все еще возвращаются.

Uri uri = Playlists.createIdUri(playlistId); //generates URI
uri = uri.buildUpon().appendQueryParameter("limit", "3").build();     
Cursor cursor = activity.managedQuery(playlistUri, null, null, null, null);
4b9b3361

Ответ 1

У меня была эта проблема, и мне пришлось сломать голову, пока я, наконец, не понял ее, или, скорее, получил пота, который работал на меня. Попробуйте следующее

Cursor cursor = activity.managedQuery(playlistUri, null, null, null, " ASC "+" LIMIT 2");

Последний параметр для sortOrder. Я предоставил порядок сортировки, а также добавил LIMIT к нему. Удостоверьтесь, что вы правильно дали пространства. Я должен был проверить сформированный запрос, и это, казалось, сработало.

Ответ 2

Поставщик контента должен по общему принципу обратить внимание на предельный параметр. К сожалению, это не универсально реализовано.

Например, при написании поставщика контента для обработки запросов SearchManager:

String limit = uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT);

Если он не реализован, вы можете вернуться только к уродливой опции склеивания ограничения в предложении sort.

Ответ 3

К сожалению, ContentResolver не может запросить ограничение. Внутри вашего ContentProvider ваш MySQLQueryBuilder может запросить добавление дополнительного параметра ограничения.

Следуя повестке дня, мы можем добавить дополнительное правило URI внутри ContentProvider.

static final int ELEMENTS_LIMIT = 5;
public static final UriMatcher uriMatcher;

static {
uriMatcher = new UriMatcher( UriMatcher.NO_MATCH );
........
uriMatcher.addURI(AUTHORITY, "elements/limit/#", ELEMENTS_LIMIT);
}

Затем в вашем методе запроса

String limit = null; //default....
    switch( uriMatcher.match(uri)){
       .......
                case ELEMENTS_LIMIT:
                    limit = uri.getPathSegments().get(2);
                break;
       ......

            }

return mySQLBuilder.query( db, projection, selection, selectionArgs, null, null, sortOrder, limit );

Запрос ContentProvider из Activity.

 uri = Uri.parse("content://" + ContentProvider.AUTHORITY + "/elements/limit/" + 1 );

//In My case I want to sort and get the greatest value in an X column. So having the column sorted and limiting to 1 works.
    Cursor query = resolver.query(uri,
                        new String[]{YOUR_COLUMNS},
                        null,
                        null,
                        (X_COLUMN + " desc") );