Hi i have Thumbnail of image and video file using cursor by implementing in Asyntask, now i have to wait for loading thumbnails if have more than 500 files in mobile.
so i used universal-image-loader-1.6.1-with-src.jar for asynchronous loading in which got problem to display bitmap,
how to load all thumbnails (Image and video file) using universal-image-loader? i have referred this http://www.technotalkative.com/android-select-multiple-photos-from-gallery/ to using Asynchronous image loader but already i have Bitmap - bitList Arraylist (Thumbnail for Image and video) then i how to display these bitmap using that library in gridview?
My Code part is
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));
}
Thanks in Advance.
Problem solved by using of Lazy loading concept that means i will show first 15 images from we have retrieved by image cursor and stored bitmap into the bitlist Arraylist and will be retrieved at each time by scrolling at the end of the view.
My Code part is :
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;
}