如何在android中使用通用图像加载器显示视频和图像缩略图?

如何在android中使用通用图像加载器显示视频和图像缩略图?,android,image,gridview,android-asynctask,universal-image-loader,Android,Image,Gridview,Android Asynctask,Universal Image Loader,嗨,我在Asyntask中实现了使用光标的图像和视频文件的缩略图,现在如果手机中有500多个文件,我必须等待加载缩略图 所以我使用universal-image-loader-1.6.1-with-src.jar进行异步加载,在异步加载中显示位图时遇到问题 如何使用通用图像加载器加载所有缩略图(图像和视频文件)?我提到过使用异步图像加载程序,但是我已经有了位图-bitList Arraylist(图像和视频的缩略图),那么我如何在gridview中使用该库显示这些位图呢 我的代码部分是

嗨,我在Asyntask中实现了使用光标的图像和视频文件的缩略图,现在如果手机中有500多个文件,我必须等待加载缩略图

所以我使用universal-image-loader-1.6.1-with-src.jar进行异步加载,在异步加载中显示位图时遇到问题

如何使用通用图像加载器加载所有缩略图(图像和视频文件)?我提到过使用异步图像加载程序,但是我已经有了位图-bitList Arraylist(图像和视频的缩略图),那么我如何在gridview中使用该库显示这些位图呢

我的代码部分是

        final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };           // Images getting
        final String orderBy = MediaStore.Images.Media.DATE_TAKEN;

        imagecursor =  mContext.getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
                null, orderBy);
        int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
        this.count = imagecursor.getCount();

bitList = new ArrayList<Bitmap>();
        arrPathList = new ArrayList<String>();
        selectedPath = new ArrayList<String>();

        for (int i = 0; i < this.count; i++) {
            imagecursor.moveToPosition(i);
            int id = imagecursor.getInt(image_column_index);
            int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);

            bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
                    mContext.getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MICRO_KIND, null));

            arrPathList.add(imagecursor.getString(dataColumnIndex));
        }


final String[] parameters = { MediaStore.Video.Media.DATA, MediaStore.Video.Media._ID, MediaStore.Video.Media.DURATION , MediaStore.Video.Media.MIME_TYPE}; // Videos getting
        final String orderBy_v = MediaStore.Video.Media._ID;

        videocursor = mContext.getContentResolver().query(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI, parameters, null,
                null, orderBy_v);

        int video_column_index = videocursor.getColumnIndex(MediaStore.Video.Media._ID);

for(int ii = 0; ii < videocursor.getCount(); ii ++){
            videocursor.moveToPosition(ii);
            int id_v = videocursor.getInt(video_column_index);
            int datacolumn_v = videocursor.getColumnIndex(MediaStore.Video.Media.DATA);
            long duration = videocursor.getInt(video_column_duration);       

            bitList.add(MediaStore.Video.Thumbnails.getThumbnail(mContext.getContentResolver(), id_v,
                    MediaStore.Video.Thumbnails.MICRO_KIND, null));

            arrPathList.add(videocursor.getString(datacolumn_v));
        }
final String[]columns={MediaStore.Images.Media.DATA,MediaStore.Images.Media.\u ID};//图像获取
最终字符串orderBy=MediaStore.Images.Media.DATE\u;
imagecursor=mContext.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,列,null,
null,orderBy);
int image\u column\u index=imagecursor.getColumnIndex(MediaStore.Images.Media.ID);
this.count=imagecursor.getCount();
bitList=新的ArrayList();
arrPathList=newarraylist();
selectedPath=new ArrayList();
for(int i=0;i

提前感谢。

使用延迟加载概念解决了这个问题,这意味着我将显示我们通过图像光标检索的前15幅图像,并将位图存储到位列表数组列表中,每次都将通过在视图末尾滚动来检索

我的代码部分是:

protected Integer doInBackground(Integer... params){    // here we passes first 15 and will pass next 15  for every scrolling at the end of the view
    // TODO Auto-generated method stub

    if(params[0] != null)
        count = params[0];

    if(count == 15)                     //  this is for will show only 15 images in first attempt in the view
        j = 0;                 // Maintain this variable as static


    for(int i = j; i < count; i ++){

        imgcursor.moveToPosition(i);

        String mime_Type = imgcursor.getString(imgcursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
        String fMime_type = mime_Type.substring(0,5);


        if(fMime_type.equals("image")){

            id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Images.Media._ID));
            dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Images.Media.DATA);
            String date = imgcursor.getString((imgcursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)));
            if(Constants.DEBUG)Log.e(TAG, "Date of this file"  +date);
            if(bitList != null)
            bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
                getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MICRO_KIND, null));
            durationcount.add(null);
            mimeType.add(fMime_type);
            arrPathList.add(imgcursor.getString(dataColumnIndex));

        }
        else
        {
            id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Video.Media._ID));
            dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Video.Media.DATA);

            if(Constants.DEBUG)Log.e("Duration", "Duration of video :"+imgcursor.getString(dataColumnIndex));
            String path = imgcursor.getString(dataColumnIndex);
            File f = new File(path);

             try {
                FileInputStream in = new FileInputStream(f);

            mRetriever.setDataSource(in.getFD());                   
            String durations = mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);        // getting duration of the every videos
            long duration = Long.parseLong(durations);
            if(Constants.DEBUG)Log.e(TAG, "Duration of file: "+duration);
            String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(duration), 
                    TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)),
                    TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)));
            if(Constants.DEBUG)Log.e(TAG, "Duration of file Hms: "+hms);
            durationcount.add(hms);
            if(bitList != null)
            bitList.add( MediaStore.Video.Thumbnails.getThumbnail(
                getContentResolver(), id,
                    MediaStore.Video.Thumbnails.MICRO_KIND, null));
            mimeType.add(fMime_type);
            arrPathList.add(imgcursor.getString(dataColumnIndex));
            in.close();

        }
             catch(Exception e){
                 e.printStackTrace();
             }
        }

    }
    j = count;

    return null;
}
protectedinteger-doInBackground(Integer…params){//在这里,对于视图末尾的每次滚动,我们将传递前15个,并将传递下15个
//TODO自动生成的方法存根
如果(参数[0]!=null)
计数=参数[0];
if(count==15)//这是for,在视图中第一次尝试时仅显示15个图像
j=0;//将此变量保持为静态
对于(int i=j;i