【问题标题】:Android ContentResolver.query always returns same dataAndroid ContentResolver.query 总是返回相同的数据
【发布时间】:2013-03-11 12:16:55
【问题描述】:

我有一个带有文件浏览器的视频播放器应用程序,其中列出了 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 子句以充当潜在的查询缓存破坏器,但它没有效果(尽管它可能被优化器作为无用的子句删除)。这次我使用不同的证书从另一台机器重新安装了应用程序,但查询结果保持不变,列出了当前不存在的文件。

【问题讨论】:

  • 顺便说一句,MediaStore.Video.Media.DURATION 不是由 MediaStore 自动计算的,因此它通常为 0,除非另一个应用程序使用有效值更新了 MediaStore 数据库记录。
  • 谢谢,我会记住的......和代码。到目前为止我尝试过的每个文件都正确填写了

标签: android search invalidation


【解决方案1】:

您应该先致电cursor.moveToFirst()

所以,你的光标迭代循环应该是这样的

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

【讨论】:

  • 它现在工作正常,所以我认为它解决了它......谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多