contentResolver不从MediaProvider返回不同的数据

时间:2017-01-10 17:42:29

标签: android sqlite android-contentresolver

我有这个功能,它应该提供专辑列表或buck_display_name(s),但它返回重复的值。我搜索了很多但找不到任何帮助:

expand_limits()

嵌套循环的输出:

String[] projection = {"Distinct "+MediaStore.Images.Media.BUCKET_ID,
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.DATA,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME
    };
    cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection,null,null,"bucket_display_name ASC");
    Log.i("ResultCount",String.valueOf(cursor.getCount()));

    int i=0;
    _ALBUM_IDs = new ArrayList<>();
    URIs = new ArrayList<>();
    _IDs = new ArrayList<>();
    _ALBUM_NAMES = new ArrayList<>();
    while (cursor.moveToNext()){
        Log.i("Row",String.valueOf(i));
        for (int j=0;j<cursor.getColumnCount();j++){
            Log.i("Column "+j,cursor.getColumnNames()[j]+", value: "+cursor.getString(j));
        }
        _ALBUM_IDs.add(cursor.getString(0));
        _IDs.add(cursor.getString(1));
        URIs.add(cursor.getString(2));
        _ALBUM_NAMES.add(cursor.getString(3));
        i++;
    }

您可以看到bucket_id,bucket_display_name的重复值。为什么是这样?谢谢。

1 个答案:

答案 0 :(得分:0)

ContentResolver.query()值不同,因此函数可以正常工作。

$("button").on("click", function(e) { // this creates a new binding on click $("form").on("submit", function(e) { }); }); 方法实际上并不允许您过滤特定列中的不同值(这将需要GROUP BY,这也是不可能的),除非内容提供者实际为您提供了数据源。 您必须手动过滤结果。