Android 获取图像库列表太慢--我需要快速的BUCKET\u DISPLAY\u NAME查询

Android 获取图像库列表太慢--我需要快速的BUCKET\u DISPLAY\u NAME查询,android,Android,我正在使用这种技术获取Android中的照片桶或图库列表 但是,这会遍历每个图像,对于1000多个图像来说速度很慢 有没有一种方法可以使用SQL(可能是DISTINCT关键字?)更快地获取BUCKET\u DISPLAY\u name列表?在使用更多图像时,我们必须使用懒散加载的概念。如果这是你想要的,你想看一看或者 使用此概念时,第一次加载的图像将存储在内存中,如果再次获取相同的图像,则将直接检查并显示,而无需再次加载。 希望这是您需要的以下解决方案对我有效。我发现对媒体内容提供商来说,在预

我正在使用这种技术获取Android中的照片桶或图库列表

但是,这会遍历每个图像,对于1000多个图像来说速度很慢


有没有一种方法可以使用SQL(可能是DISTINCT关键字?)更快地获取BUCKET\u DISPLAY\u name列表?

在使用更多图像时,我们必须使用懒散加载的概念。如果这是你想要的,你想看一看或者 使用此概念时,第一次加载的图像将存储在内存中,如果再次获取相同的图像,则将直接检查并显示,而无需再次加载。
希望这是您需要的

以下解决方案对我有效。我发现对媒体内容提供商来说,在预测中做不同的选择是不可取的。此外,这似乎适用于游标加载程序

        // TODO Auto-generated method stub
    String[] projection = { Images.Media._ID, Images.Media.BUCKET_DISPLAY_NAME };

    HashMap<String, String> imagesGroups = new HashMap<String, String>();
    String ids = null;

    Cursor c = _myContext.getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
    if (c.getCount() > 0)
    {
        c.moveToFirst();
        do
        {
            String bucketDisplayName = c.getString(c.getColumnIndex(Images.Media.BUCKET_DISPLAY_NAME));
            String _id = c.getString(c.getColumnIndex(Images.Media._ID));

            //here is where we ensure we get a unique image id for each distinct bucket display name
            if(!imagesGroups.containsKey(bucketDisplayName))
            {
                imagesGroups.put(bucketDisplayName, _id);

                if(ids == null)
                    ids = _id;
                else
                    ids += "," + _id;
            }
        }
        while (c.moveToNext());
    }

    c.close();

    String selection = Images.Media._ID + " IN (" + ids + ")";

    CursorLoader cursorLoader = new CursorLoader(this, Images.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null);
    return cursorLoader;
//TODO自动生成的方法存根
String[]projection={Images.Media.\u ID,Images.Media.BUCKET\u DISPLAY\u NAME};
HashMap imagesGroups=新建HashMap();
字符串id=null;
游标c=\u myContext.getContentResolver().query(Images.Media.EXTERNAL\u CONTENT\u URI,投影,null,null,null);
如果(c.getCount()>0)
{
c、 moveToFirst();
做
{
String bucketDisplayName=c.getString(c.getColumnIndex(Images.Media.BUCKET_DISPLAY_NAME));
String _id=c.getString(c.getColumnIndex(Images.Media._id));
//在这里,我们确保为每个不同的bucket显示名称获得唯一的图像id
如果(!imagesGroups.containsKey(bucketDisplayName))
{
imagesGroups.put(bucketDisplayName,_id);
if(ids==null)
id=_id;
其他的
ids+=“,”+\U id;
}
}
而(c.moveToNext());
}
c、 close();
字符串选择=Images.Media._ID+“在(“+ID+”)中”;
CursorLoader CursorLoader=新的CursorLoader(这个,Images.Media.EXTERNAL\u CONTENT\u URI,投影,选择,null,null);
返回游标装入器;

这不是延迟加载问题。这只是一个从2000多张图片中获得大约10个画廊的例子。我正在寻找一个更好的查询。我也在寻找更好的解决方案。我没有找到更好的解决方案,所以我收紧了代码,在更新的手机上显示几千张照片,速度似乎足够快。这很酷。如果你找到了比这更好的解决方案,请在这篇文章中告知