Android ContentResolver.query始终返回相同的数据

时间:2013-03-11 12:16:56

标签: android search invalidation

我有videoplayer应用程序,文件浏览器列出了SD卡上的所有视频

i want get audio files in sd card启发的代码

使用ContentResolver,按预期工作,但如果卡上的文件发生更改,则不会更新。我不是自动意思,但在视图/应用程序重启后。甚至没有重新安装应用程序帮助,仍然显示相同的文件。删除的视频文件无法通过PC显示,也无法播放(此视频无法播放(翻译))。

我转储了数据,问题不在视图缓存或其他地方。我没有实现自己的任何缓存,也没有找到任何关于此事的内容。谢谢

代码:

    // 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 个答案:

答案 0 :(得分:4)

您应该先致电cursor.moveToFirst()

因此,您的游标迭代循环应该看起来像

if (cursor.moveToFirst()) {
    do {
        // cursorIndex = cursor.getColumnIndexOrThrow, etc...
    } while (cursor.moveToNext());
}