【问题标题】:Dowloading Image using URL使用 URL 下载图像
【发布时间】:2017-11-27 05:36:50
【问题描述】:

我正在尝试使用我的应用程序中的 URL 和按钮下载图像。当我在手机上运行它时,我无法下载图像。谁能指出这个问题。提前感谢您的帮助:)

这是我的代码。

public class MainActivity extends AppCompatActivity {

ImageView download;

public void downloadImage(View view){

    DownloadImage image = new DownloadImage();
    Bitmap result;
    try {
        result = image.execute("https://en.wikipedia.org/wiki/File:Bart_Simpson_200px.png").get();
        download.setImageBitmap(result);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    download = (ImageView) findViewById(R.id.imageView);
}

public class DownloadImage extends AsyncTask<String, Void, Bitmap>{

    @Override
    protected Bitmap doInBackground(String... urls) {
        URL url;
        HttpURLConnection urlConnection = null;
        try {
            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoInput(true);
            urlConnection.connect();
            InputStream in = urlConnection.getInputStream();
            Bitmap Image = BitmapFactory.decodeStream(in);
            in.close();
            return Image;
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
         return null;
    }
}
}

【问题讨论】:

  • 我强烈建议您使用 Glide 而不是 AsyncTask。我将它用于所有图像加载,本地或远程。

标签: java android


【解决方案1】:

您可以通过两种方式从 url 下载图片

1.你可以使用Glide library从url加载图片看看下面的代码它可以帮助你简单的方式

编译这个库

   implementation 'com.github.bumptech.glide:glide:4.6.1'

比这样加载图片

 Glide.with(MainActivity.this)
        .load(url)
        .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
        .into(imageview);

2 .如果你不想使用第三方库,试试这个

 new DownloadImage(imamgeview).execute(url);

创建异步任务

public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;

public DownloadImage(ImageView bmImage) {
    this.bmImage = (ImageView ) 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.d("Error", e.getStackTrace().toString());

    }
    return mIcon11;
}

protected void onPostExecute(Bitmap result) {
    bmImage.setImageBitmap(result);
}
}

我希望它适用于你的情况

【讨论】:

    【解决方案2】:

    你没有调用函数

    downloadImage(view);
    

    在 oncreate 中(在 findviewbyid 行之后)

    还要检查互联网权限是否在 Android Manifest 文件中:

        <uses-permission android:name="android.permission.INTERNET" />
    

    话虽如此,您应该使用 Glide\Picasso\Ion 等库...比 asynctask 更好地实现此目的

    https://github.com/bumptech/glide - 滑行

    https://github.com/koush/ion - 离子

    http://square.github.io/picasso/-毕加索

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 2021-10-22
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多