2017-01-09 3 views
1

Android getContentResolver() Использование «IN» в ИНЕКЕ с большим количеством предметовAndroid getContentResolver() Использование «IN» с ИНЕКЕ с большим количеством предметов

Я полностью и Она Реализован этот успех запроса дает необходимые данные

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      String projection[] = {MediaStore.Audio.Media.DATA, 
        MediaStore.Audio.Media.TITLE, 
        MediaStore.Audio.Media.ARTIST, 
        MediaStore.Audio.Media.ALBUM, 
        MediaStore.Audio.Media.COMPOSER, 
        MediaStore.Audio.Media.DURATION, 
        // android.provider.MediaStore.Audio.Albums.ALBUM_ART, 
        MediaStore.Audio.Media.ALBUM_ID, 
        MediaStore.Audio.Media._ID,}; 
       String selection1 = MediaStore.Audio.Media.IS_MUSIC + " = 1" + " AND " 
        + MediaStore.Audio.Media._ID + " IN("; 
      for (int i = 0; i < SongsList.size(); i++) {// songslist is an array of IDs 
       selection1 += "?, "; 
      } 
      selection1 = selection1.substring(0, selection1.length() - 2) + ")"; 

      String[] selectionArgs = new String[SongsList.size()]; 
      selectionArgs = SongsList.toArray(selectionArgs); 

      Cursor cursor = this.getContentResolver().query(uri, projection, selection1, 
        selectionArgs, null); 

Однако, когда количество предметов большой запрос не выполняется,

есть ли альтернатива для получения большого количества элементов с getContentResolver() без использования «IN» в ИНЕКЕ

+0

Почему не использовать 'AsyncTask' для выполнения запроса в рабочей Thread? –

+0

может предоставить пример с asynctask – 1234567

ответ

1

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

Лучше всего получить все строки, а затем игнорировать любые, у которых нет одного из ваших идентификаторов.

В качестве альтернативы, извлекайте строки один за другим. (Это, вероятно, имеет слишком много накладных расходов.)

(Если вам нужно отфильтрованные результаты как фактический Cursor объект, поместите их в MatrixCursor.)

+0

Я возьму это как принятый ответ, логически работает хорошо, но все же должно быть некоторое улучшение управления для Android – 1234567

Смежные вопросы