我正在使用此AsyncTask从URL加载图像并使用该图像填充ImageView:
new DownloadImageTask((ImageView) findViewById(R.id.headerIV)).execute(imageURL);
和
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
我注意到每当我对应用程序进行后台处理并重新启动活动时,ImageViews都会被清空。对ImageViews的各种检查表明它们在onCreate()
中是空的,因此如果我想再次显示图像,我必须再次调用AsyncTask,这最终会导致内存不足异常。所以,我想知道:基于我正在使用的代码块,活动是否因onPause()
上的某些原因回收/清空了我的ImageView?
答案 0 :(得分:0)
试试这个!!!!
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
Bitmap mIcon11;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
try {
mIcon11 = BitmapFactory.decodeStream((InputStream) new URL(urls[0]).getContent());
} catch (Exception e) {
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if (result != null) {
bmImage.setImageBitmap(result);
} else {
Toast.makeText(TestActivity.this, "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();
}
}
}
答案 1 :(得分:0)
每当您的应用程序到达前台时,都会调用onResume()并再次生成视图,因此可能是null值的原因。 你可以使用onResume()。 (有关更多信息,请查看活动生命周期) 另外,根据其他人的建议,您可以使用Picasso或Universal Image Loader或其他库轻松实现。 首先,您可以参考以下链接:
https://www.simplifiedcoding.net/picasso-android-tutorial-picasso-image-loader-library/ http://javatechig.com/android/how-to-use-picasso-library-in-android http://javatechig.com/android/universal-image-loader-library-in-android