我一直在尝试将图像下载到位图元素中,以将它们加载到带有图像的 gridView 中,但我需要异步执行,因为如果没有给出错误“android.os.NetworkOnMainThreadException”。
搜索时我发现了很多教程可以做到这一点,但所有教程都在完成后将此元素添加到 ImageView 中。 除了位图之外还有什么方法可以做到这一点吗?
这里我找到了无需异步下载的方法:
URL url = new URL("http://....");
Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
还有一个:
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
最佳答案
将您的 getBitmapFromURL
方法包装到 AsyncTask
中,如下所示:
private class GetBitmapFromURLAsync extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
return getBitmapFromURL(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
}
}
将上述 AsyncTask
嵌套到您的 Activity 中:
public class MyActivity extends Activity {
// To store the Bitmap returned by doInBackground asynctask
private Bitmap result;
// existing Activity code
...
private class GetBitmapFromURLAsync extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
return getBitmapFromURL(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
// return the bitmap by doInBackground and store in result
result = bitmap;
}
}
并调用上面的代码:
GetBitmapFromURLAsync getBitmapFromURLAsync = new GetBitmapFromURLAsync();
getBitmapFromURLAsync.execute("http://....");
关于java - 将图像下载到 Android 中的位图文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510411/