gpt4 book ai didi

android - 由 : java. lang.OutOfMemoryError 加载图像引起的错误

转载 作者:行者123 更新时间:2023-11-29 01:42:09 25 4
gpt4 key购买 nike

这是我后台加载图片的方法,第一次和第二次正常加载。但是在这些加载之后,出现内存错误。我该如何解决这个问题?

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;
}

}

是的,我找到了代码,并多次调用按 Activity 填充图片

private Drawable getImageFromUrl(String url) 抛出异常{ 返回 Drawable.createFromStream((InputStream)new URL(url).getContent(), "src"); 在这里输入代码

}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
//declare variable of ImageView
ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {
//initialize variable with the passing ImageView parameter
this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {
//get url of image
String urldisplay = urls[0];
//create Bitmap variable
Bitmap mIcon11 = null;
try {
//create instance of InputStream and pass URL
InputStream in = new java.net.URL(urldisplay).openStream();
//decode stream and initialize bitmap
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
//show error log

Log.e("Error", e.getMessage());
e.printStackTrace();
}
//return bitmap
return mIcon11;
}

protected void onPostExecute(Bitmap result) {
//get bitmap and initialize ImageView
try {
bmImage.setImageBitmap(result);

} catch (Exception e) {
// TODO: handle exception
}

}
}

使用毕加索

在此输入验证码

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;


}

@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);


}


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();



Picasso.with(context)
.load(image)

.into(viewholder.imageView_restaurant_icon);

} catch (Exception e) {
// TODO: handle exception
}

return v;
}

public class ViewHolder {
public TextView textView_main_row_title;
public TextView textView_main_row_direccion;

public ImageView imageView_restaurant_icon;
}

和其他 Activity 使用 picaso 。

如果(ImagenObj != null) {

                            for (int i = 0; i < ImagenObj.length(); i++) {
JSONObject c = ImagenObj.getJSONObject(i);

// Storing each json item in variable
int id = Integer.parseInt( c.getString(ValoresGenerales.TAG_ID));
String nombre = c.getString(ValoresGenerales.TAG_NOMBRE);
String url = c.getString(ValoresGenerales.TAG_URL);


if(ValoresGenerales.TAG_SECUNDARIA_A.equals(nombre))
{
url_A = url;
}
else if(ValoresGenerales.TAG_SECUNDARIA_B.equals(nombre))
{
url_B = url;
}
else if(ValoresGenerales.TAG_SECUNDARIA_C.equals(nombre))
{
url_C = url;
}
else if(ValoresGenerales.TAG_SECUNDARIA_D.equals(nombre))
{
url_D = url;
}
else if(ValoresGenerales.TAG_ACERCA_DE.equals(nombre))
{
url_Acerca_de = url;
}




}

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if(!url_A.equals(""))
{
Picasso.with(m_context).load(url_A).into(imageViewA);


}
if(!url_B.equals(""))
{
Picasso.with(m_context).load(url_B).into(imageViewB);

}
if(!url_C.equals(""))
{
Picasso.with(m_context).load(url_C).into(imageViewC);

}
if(!url_D.equals(""))
{
Picasso.with(m_context).load(url_D).into(imageViewD);

}

if(!url_Acerca_de.equals(""))
{

Picasso.with(m_context).load(url_Acerca_de).into(iv_acerca_de);


}
}


enter code here

这是堆栈跟踪:

05-26 22:57:34.690: E/ActivityThread(22261): Failed to inflate
05-26 22:57:34.690: E/ActivityThread(22261): android.view.InflateException: Binary XML file line #112: Error inflating class <unknown>
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
05-26 22:57:34.690: E/ActivityThread(22261): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-26 22:57:34.690: E/ActivityThread(22261): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:323)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.Activity.setContentView(Activity.java:1881)
05-26 22:57:34.690: E/ActivityThread(22261): at com.example.lookrestaurant.actDetalleRestaurant.onCreate(actDetalleRestaurant.java:94)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.Activity.performCreate(Activity.java:5104)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.ActivityThread.access$600(ActivityThread.java:153)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
05-26 22:57:34.690: E/ActivityThread(22261): at android.os.Handler.dispatchMessage(Handler.java:99)
05-26 22:57:34.690: E/ActivityThread(22261): at android.os.Looper.loop(Looper.java:137)
05-26 22:57:34.690: E/ActivityThread(22261): at android.app.ActivityThread.main(ActivityThread.java:5227)
05-26 22:57:34.690: E/ActivityThread(22261): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 22:57:34.690: E/ActivityThread(22261): at java.lang.reflect.Method.invoke(Method.java:511)
05-26 22:57:34.690: E/ActivityThread(22261): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-26 22:57:34.690: E/ActivityThread(22261): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-26 22:57:34.690: E/ActivityThread(22261): at dalvik.system.NativeStart.main(Native Method)
05-26 22:57:34.690: E/ActivityThread(22261): Caused by: java.lang.reflect.InvocationTargetException
05-26 22:57:34.690: E/ActivityThread(22261): at java.lang.reflect.Constructor.constructNative(Native Method)
05-26 22:57:34.690: E/ActivityThread(22261): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-26 22:57:34.690: E/ActivityThread(22261): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
05-26 22:57:34.690: E/ActivityThread(22261): ... 32 more
05-26 22:57:34.690: E/ActivityThread(22261): Caused by: java.lang.OutOfMemoryError
05-26 22:57:34.690: E/ActivityThread(22261): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
05-26 22:57:34.690: E/ActivityThread(22261): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
05-26 22:57:34.690: E/ActivityThread(22261): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
05-26 22:57:34.690: E/ActivityThread(22261): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
05-26 22:57:34.690: E/ActivityThread(22261): at android.content.res.Resources.loadDrawable(Resources.java:1992)
05-26 22:57:34.690: E/ActivityThread(22261): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
05-26 22:57:34.690: E/ActivityThread(22261): at android.widget.ImageView.<init>(ImageView.java:120)
05-26 22:57:34.690: E/ActivityThread(22261): at android.widget.ImageView.<init>(ImageView.java:110)
05-26 22:57:34.690: E/ActivityThread(22261): ... 35 more
05-26 22:57:34.690: D/AndroidRuntime(22261): Shutting down VM
05-26 22:57:34.690: W/dalvikvm(22261): threadid=1: thread exiting with uncaught exception (group=0x41001930)
05-26 22:57:34.705: E/AndroidRuntime(22261): FATAL EXCEPTION: main
05-26 22:57:34.705: E/AndroidRuntime(22261): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lookrestaurant/com.example.lookrestaurant.actDetalleRestaurant}: android.view.InflateException: Binary XML file line #112: Error inflating class <unknown>
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread.access$600(ActivityThread.java:153)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.os.Handler.dispatchMessage(Handler.java:99)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.os.Looper.loop(Looper.java:137)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread.main(ActivityThread.java:5227)
05-26 22:57:34.705: E/AndroidRuntime(22261): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 22:57:34.705: E/AndroidRuntime(22261): at java.lang.reflect.Method.invoke(Method.java:511)
05-26 22:57:34.705: E/AndroidRuntime(22261): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-26 22:57:34.705: E/AndroidRuntime(22261): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-26 22:57:34.705: E/AndroidRuntime(22261): at dalvik.system.NativeStart.main(Native Method)
05-26 22:57:34.705: E/AndroidRuntime(22261): Caused by: android.view.InflateException: Binary XML file line #112: Error inflating class <unknown>
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
05-26 22:57:34.705: E/AndroidRuntime(22261): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-26 22:57:34.705: E/AndroidRuntime(22261): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:323)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.Activity.setContentView(Activity.java:1881)
05-26 22:57:34.705: E/AndroidRuntime(22261): at com.example.lookrestaurant.actDetalleRestaurant.onCreate(actDetalleRestaurant.java:94)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.Activity.performCreate(Activity.java:5104)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)
05-26 22:57:34.705: E/AndroidRuntime(22261): ... 11 more
05-26 22:57:34.705: E/AndroidRuntime(22261): Caused by: java.lang.reflect.InvocationTargetException
05-26 22:57:34.705: E/AndroidRuntime(22261): at java.lang.reflect.Constructor.constructNative(Native Method)
05-26 22:57:34.705: E/AndroidRuntime(22261): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
05-26 22:57:34.705: E/AndroidRuntime(22261): ... 32 more
05-26 22:57:34.705: E/AndroidRuntime(22261): Caused by: java.lang.OutOfMemoryError
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.content.res.Resources.loadDrawable(Resources.java:1992)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.widget.ImageView.<init>(ImageView.java:120)
05-26 22:57:34.705: E/AndroidRuntime(22261): at android.widget.ImageView.<init>(ImageView.java:110)
05-26 22:57:34.705: E/AndroidRuntime(22261): ... 35 more
05-26 22:57:35.605: D/dalvikvm(22261): GC_FOR_ALLOC freed 1282K, 25% free 29998K/39940K, paused 22ms, total 25ms
05-26 22:57:36.485: D/dalvikvm(22261): GC_CONCURRENT freed 1883K, 25% free 30130K/39940K, paused 1ms+6ms, total 32ms

最佳答案

您遇到的问题是,由于您尝试操作的Bitmap 的大小,手机的Bitmap 内存不足。确保您使用的分辨率合理。

有很多不错的异步图像下载库可用。我可以建议 Picasso .它甚至具有帮助您轻松调整图像大小的方法。

关于android - 由 : java. lang.OutOfMemoryError 加载图像引起的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com