Android ContentResolver.query всегда возвращает одни и те же данные

У меня есть приложение для видеоплеера с файловым браузером, в котором перечислены все видео на SD-карте

Код вдохновлен тем, что я хочу получить аудио файлы на SD-карте

Использование ContentResolver работает как положено, но не обновляется, если файлы на карте меняются. Я не имею ввиду автоматически, но после просмотра / перезапуска приложения. Даже переустановка приложения не помогла, все равно показывает те же файлы. Удаленный видеофайл не виден через ПК, и его невозможно воспроизвести (это видео невозможно воспроизвести (перевод)).

Я сбросил данные, и проблема не в кэшировании или в другом месте. Я не применяю никакого собственного кэширования и не смог ничего найти по этому вопросу. Спасибо

Код:

    // acquisition  
    String[] projection = {
        MediaStore.Video.Media._ID,
        MediaStore.Video.Media.DISPLAY_NAME,
        MediaStore.Video.Media.DURATION,
        MediaStore.Video.Media.DATA
    };

    ContentResolver resolver = getActivity().getContentResolver();
    Cursor videoCursor = resolver.query(
        MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
        projection,
        null,
        null,
        null
    );

    // extraction
    while(cursor.moveToNext()) {
        cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        filepath = cursor.getString(cursorIndex);

        cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
        filename = cursor.getString(cursorIndex);

        cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
        duration = cursor.getString(cursorIndex);

        result[ index++ ] = new VideoFileMetadata(filename, duration, filepath);
    }

Изменить 1 [14-03-2013]:

Я пытался добавить number + " = " + number в ORDER или WHERE, чтобы выступить в роли потенциального нарушителя кэширования запросов, но это не имело никакого эффекта (хотя, возможно, оно было удалено оптимизатором как бесполезное предложение). На этот раз я переустановил приложение с другого компьютера, используя другой сертификат, но результат запроса остался прежним, перечисляя в настоящее время несуществующие файлы.

1 ответ

Решение

Вы должны сначала позвонить cursor.moveToFirst() ,

Итак, ваш цикл итераций курсора должен выглядеть так:

if (cursor.moveToFirst()) {
    do {
        // cursorIndex = cursor.getColumnIndexOrThrow, etc...
    } while (cursor.moveToNext());
}
Другие вопросы по тегам