我正在尝试下载图片文件。在某些情况下,图像太大,在中途会产生OutOfMemoryError。如何应对这种情况?
private class DownloadImage extends AsyncTask<String, Void, Bitmap> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("Download Image");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Bitmap doInBackground(String... URL) {
String imageURL = URL[0];
Bitmap bitmap = null;
try {
// Download Image from URL
InputStream input = new java.net.URL(imageURL).openStream();
// Decode Bitmap
bitmap = BitmapFactory.decodeStream(input);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
// Set the bitmap into ImageView
image.setImageBitmap(result);
// Close progressdialog
mProgressDialog.dismiss();
}
}
答案 0 :(得分:3)
首先,您需要确定在哪个屏幕或屏幕部分中显示它。您需要定义容器的结果大小(宽度和高度),它将在应用程序中显示您的图像。然后,当您收到图像时,需要将其缩小到目标尺寸,然后再显示它。
以下是完整的教程如何执行!link!
但我建议您使用“加载图片”中的一个&#39;库。 Picasso 就是一个很好的例子。请查看here
答案 1 :(得分:0)
如果您不想使用Picasso
等库,可以使用Volley
。
去搜索NetworkImageView
,也许会解雇你。有一个教程:using-volley-to-download-cache-and-display-bitmaps.
你也可以看看这个问题:how-do-i-properly-set-up-volley-to-download-images-from-a-url
这里也是:Volley Request
答案 2 :(得分:0)
在清单文件的应用程序标记中添加“android:largeHeap = true”