Web Image

设置网络图片

通过网络连接获取图片信息,并将其设为软件的 ImageView 图片属性


介绍:

与获取 HTML 类似,首先需要建立网络连接并获取数据,只是这次不通过 String 获取保存数据,而是使用 Bitmap 保存。

与获取 HTML 数据类似,联网操作同样需要新建线程,要注意的是在子线程不能操作 UI,需要通过外部函数设置图片或者在函数返回 Bitmap 对象使用。


核心代码:

  1. 建立网络连接,这里使用 HttpURLConnection
URL url = new URL("https://www.example.com.img")
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// ......
// 诸如超时时间等的设置
  1. 处理返回数据
InputStream is = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
  1. 设置控件,注意该操作不能在子线程中进行
imageView.setImageBitmap(bitmap);

完整代码

代码很烂,有很多可以优化的地方

//设置网络图片
public void setUrlImage(final int ImageViewId, final String address) {
    //开启一个线程用于联网
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //把传过来的路径转成URL
                URL url = new URL(address);
                //获取连接
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //使用GET方法访问网络
                connection.setRequestMethod("GET");
                //超时时间为10秒
                connection.setConnectTimeout(10000);
                //获取返回码
                int code = connection.getResponseCode();
                if (code == 200) {
                    InputStream inputStream = connection.getInputStream();
                    //使用工厂把网络的输入流生产Bitmap
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    //子线程不能操作UI,通过外部函数设置图片
                    setImage(ImageViewId, bitmap);
                    inputStream.close();
                } else {
                    //服务启发生错误,显示提示信息
                    Toast.makeText(HttpImage.this, "Can't get the image from Internet.", Toast.LENGTH_SHORT).show();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}

public void setImage(int ImageViewId, Bitmap bitmap) {
    ImageView imageView = findViewById(ImageViewId);
    imageView.setImageBitmap(bitmap);
}

一些废话

实际上和处理 HTML 是类似的,只不过不再使用 String 处理服务器返回的数据。