java - 将图像下载到 Android 中的位图文件中

标签 java android bitmap download httpurlconnection

我一直在尝试将图像下载到位图元素中,以将它们加载到带有图像的 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;
    }
}

Android load from URL to Bitmap

最佳答案

将您的 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/

相关文章:

android - 如何将位图发送到 WhatsApp 应用程序

java - 由 : java. 引起 lang.ClassNotFoundException: 没有找到类 "okhttp3.internal.Platform"

java - PHP 使用 cUrl 将数组发送到 java servlet

java - android.app.ServiceConnectionLeaked : Activity . ..MainActivity 泄露了原来绑定(bind)在这里的 ServiceConnection ...MainActivity$1@e794142

Android:压缩图像会在左侧和顶部边缘创建黑色边框

r - 如何将图像转换为ggplot2散点图的点数据

java - 在另一个 Activity 中显示选定的图像

java - 银行账户帐号的新类

java - Realm 没有为反射对象的字段设置值(Android)

java - 在包 'exitFadeDuration' 中找不到属性 'android' 的资源标识符