4.4网络图片查看器HttpURLConnection

1、先设置好需要图片的url,创建一个Url对象

URL mURL = new URL(url);//ur可以赋值任意图片的链接地址

2、得到http的连接对象openConnection,设置一些参数请求超时之类的

conn = (HttpURLConnection) mURL.openConnection();
conn.setRequestMethod("GET");       // 设置请求方法为Get
conn.setConnectTimeout(10000);      // 设置连接服务器的超时时间, 如果超过10秒钟, 没有连接成功, 会抛异常
conn.setReadTimeout(5000);      // 设置读取数据时超时时间, 如果超过5秒, 抛异常

3、开始链接,getResponseCode得到服务器的响应码

conn.connect();

4、链接成功后,获得服务器返回的流数据

InputStream is = conn.getInputStream();

5、根据流数据创建一个bitmap位图对象

Bitmap bitmap = BitmapFactory.decodeStream(is); 

6、把得到的bitmap,set出来

ivIcon.setImageBitmap(bitmap);

主线程与子线程的关系:
这里写图片描述

public class MainActivity extends Activity implements OnClickListener {

    private static final String TAG = "MainActivity";
    protected static final int ERROR = 1;
    private EditText etUrl;
    private ImageView ivIcon;
    private final int SUCCESS = 0;

    private Handler handler = new Handler() {
        /**
         * 接收消息
         */
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            Log.i(TAG, "what = " + msg.what);
            if(msg.what == SUCCESS) {   // 当前是访问网络, 去显示图片
                ivIcon.setImageBitmap((Bitmap) msg.obj);        // 设置imageView显示的图片
            } else if(msg.what == ERROR) {
                Toast.makeText(MainActivity.this, "抓去失败", 0).show();
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ivIcon = (ImageView) findViewById(R.id.iv_icon);
        etUrl = (EditText) findViewById(R.id.et_url);

        findViewById(R.id.btn_submit).setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        final String url = etUrl.getText().toString();

        new Thread(new Runnable() {

            @Override
            public void run() {
                Bitmap bitmap = getImageFromNet(url);
                //ivIcon.setImageBitmap(bitmap);        // 设置imageView显示的图片
                if(bitmap != null) {
                    Message msg = new Message();
                    msg.what = SUCCESS;
                    msg.obj = bitmap;
                    handler.sendMessage(msg);
                } else {
                    Message msg = new Message();
                    msg.what = ERROR;
                    handler.sendMessage(msg);
                }
            }}).start();

    }

    /**
     * 根据url连接取网络抓去图片返回
     * @param url
     * @return url对应的图片
     */
    private Bitmap getImageFromNet(String url) {
        HttpURLConnection conn = null;
        try {
            URL mURL = new URL(url);    // 创建一个url对象
            // 得到http的连接对象
            conn = (HttpURLConnection) mURL.openConnection();
            conn.setRequestMethod("GET");       // 设置请求方法为Get
            conn.setConnectTimeout(10000);      // 设置连接服务器的超时时间, 如果超过10秒钟, 没有连接成功, 会抛异常
            conn.setReadTimeout(5000);      // 设置读取数据时超时时间, 如果超过5秒, 抛异常
            conn.connect();     // 开始链接
            int responseCode = conn.getResponseCode(); // 得到服务器的响应码
            if(responseCode == 200) {
                // 访问成功
                InputStream is = conn.getInputStream(); // 获得服务器返回的流数据
                Bitmap bitmap = BitmapFactory.decodeStream(is); // 根据 流数据 创建一个bitmap位图对象
                return bitmap;
            } else {
                Log.i(TAG, "访问失败: responseCode = " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(conn != null) {
                conn.disconnect();      // 断开连接
            }
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值