Выберите первые n строк в ContentProvider

#android #where #android-contentprovider

#Android #where-предложение #android-contentprovider

Вопрос:

У меня есть этот выбор:

  final Cursor cursorConversations = getContentResolver().query(
        Uri.parse("content://gmail-ls/conversations/"   Uri.encode(mailAddress)),
        null, null, null, BaseColumns._ID   " DESC");

 ContentQueryMap mQueryMap 
        = new ContentQueryMap(cursorConversations, BaseColumns._ID, true, null);
  

С помощью ContentQueyMap я могу кэшировать данные курсора и выполнять итерации по ним также с закрытым курсором (мне это нужно для повышения производительности).

Теперь я хочу, чтобы select из Corsor извлекал только первые пятьдесят строк. Решение о повторении цикла 50 раз в mQueryMap.getRows().entrySet() неверно: я не хочу, чтобы mQueryMap получал все строки курсора, а только первые пятьдесят.

Есть идеи? Существует ли предложение where для получения только первых n строк?

Ответ №1:

Вы могли бы сделать

 final Cursor cursorConversations = getContentResolver().query(
    Uri.parse("content://gmail-ls/conversations/"   Uri.encode(mailAddress)),
    null, null, null, BaseColumns._ID   " DESC "   " LIMIT 5");
  

«ОГРАНИЧИТЬ x» после вашей сортировки.

Приветствия

Комментарии:

1. Большое вам спасибо! @Chris, пожалуйста, как вы думаете, вы могли бы мне здесь помочь: goo.gl/MAjgTh

Ответ №2:

ВЫБЕРИТЕ * ИЗ ОГРАНИЧЕНИЯ ИМЯ_ТАБЛИЦЫ 5;

Это справедливо для sqlite. Попробуйте добавить «LIMIT 5» в ваше предложение where. (Я не пробовал)

Комментарии:

1. Не пойдет. И если я введу в «параметр предложения сортировки» ddms выдает исключение: «SortOrder ДОЛЖЕН быть пустым»… (почему??)