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());
}