使用URL下载图像

时间:2017-06-23 15:14:25

标签: java android

我正在尝试使用我的应用中的网址和按钮下载图片。当我在手机上运行时,我无法下载图像。任何人都可以指出这个问题。感谢您的帮助:)

这是我的代码。

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;
    }
}
}

2 个答案:

答案 0 :(得分:3)

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

1 。您可以通过用户Glide library从网址加载图片,查看以下代码,它可以以简单的方式为您提供帮助

编译此库

   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);
}
}

我希望它适用于您的情况

答案 1 :(得分:0)

你没有调用函数

downloadImage(view);

在oncreate中(在findviewbyid行之后)

同时检查互联网权限是否在Android清单文件中:

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

说过你应该使用像Glide \ Picasso \ Ion等这样的库...比这个purpuse的asynctask要好得多

https://github.com/bumptech/glide - Glide

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

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

希望它有所帮助。