error Caused by: java.lang.OutOfMemoryError Load Image
- by user2493770
This is my method to load images in background, the first and second load normally. But after these loading, a memory error appears. How can I fix this?
public class MainArrayAdapterViewHolder extends ArrayAdapter<EmpresaListaPrincipal> {
private final Context context;
private ArrayList<EmpresaListaPrincipal> data_array;
public DisplayImageOptions options;
public ImageLoader imageLoader = ImageLoader.getInstance();
public MainArrayAdapterViewHolder(Context context, ArrayList<EmpresaListaPrincipal> list_of_ids) {
super(context, R.layout.main_list_rowlayout, list_of_ids);
this.context = context;
this.data_array = list_of_ids;
//------------- read more here https://github.com/nostra13/Android-Universal-Image-Loader
options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.ic_launcher).showImageOnFail(R.drawable.ic_launcher).resetViewBeforeLoading()
.cacheOnDisc().imageScaleType(ImageScaleType.IN_SAMPLE_INT).bitmapConfig(Bitmap.Config.RGB_565).delayBeforeLoading(0).build();
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(720, 1280) // default = device screen
// dimensions
.discCacheExtraOptions(720, 1280, CompressFormat.JPEG, 100).threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.memoryCacheSize(2 * 1024 * 1024).discCache(new UnlimitedDiscCache(cacheDir)) // default
.discCacheSize(50 * 1024 * 1024).discCacheFileCount(100).discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(context)) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.defaultDisplayImageOptions(options) // default
.build();
imageLoader.init(config);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewholder;
View v = convertView;
//Asociamos el layout de la lista que hemos creado e incrustamos el ViewHolder
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//View rowView = inflater.inflate(R.layout.main_list_rowlayout, parent, false);
v = inflater.inflate(R.layout.main_list_rowlayout, parent, false);
viewholder = new ViewHolder();
viewholder.textView_main_row_title = (TextView) v.findViewById(R.id.textView_main_row_title);
viewholder.imageView_restaurant_icon = (ImageView) v.findViewById(R.id.imageView_restaurant_icon);
viewholder.textView_main_row_direccion = (TextView) v.findViewById(R.id.textView_main_row_direccion);
v.setTag(viewholder);
}
ImageLoadingListener mImageLoadingListenr = new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
// Log.e("* started *", String.valueOf("complete"));
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
// Log.e("* complete *", String.valueOf("complete"));
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
// TODO Auto-generated method stub
}
};
try {
viewholder = (ViewHolder) v.getTag();
viewholder.textView_main_row_title.setText(data_array.get(position).getNOMBRE());
viewholder.textView_main_row_direccion.setText(data_array.get(position).getDIRECCION());
String image = data_array.get(position).getURL();
// ------- image ---------
try {
if (image.length() > 4) imageLoader.displayImage(image, viewholder.imageView_restaurant_icon, options, mImageLoadingListenr);
} catch (Exception ex) {
}
//textView_main_row_title.setText(name);
//textView_main_row_address.setText(address);
} catch (Exception e) {
// TODO: handle exception
}
return v;
}
public class ViewHolder {
public TextView textView_main_row_title;
public TextView textView_main_row_direccion;
//public TextView cargo;
public ImageView imageView_restaurant_icon;
}
}