2018-03-07 网络连接与handler机制

笔记如下

显示网络图片

 
private Handler mHandler = new Handler(){
        
        public void handleMessage(Message msg) {
            
            //取出消息中的数据
            Bitmap bitmap = (Bitmap) msg.obj;
            
            iv.setImageBitmap(bitmap);
        };
    };
new Thread(){
            
            public void run() {
                
                try {
                    URL url = new URL(path);
                    
                    // http://www.itheima.com/images_new/logo.jpg --由于这里 使用的 是 http协议去 获得连接, 所以获得的是 
                    // HttpURLConnection 的一个 实例 
                    
                                        
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    
                    //连接网络的时候, 有很多 不确定性...
                    // 为了提供用户的感受, 会 设置一个 连接 超时的 时间
                    conn.setConnectTimeout(5000);
                    
                    //设置请求的方式
                    conn.setRequestMethod("GET");
                    
                    //拿到 返回的数据的类型
                    String contentType = conn.getContentType();
                    
                    //数据的长度
                    int length = conn.getContentLength();
                    
                    System.out.println("contentType :" + contentType);
                    System.out.println("length :" + length);
                    
                    // Tengine/2.0.2
//                  conn.getHeaderField("Server");
                    
                    
                    // 获得 服务器 返回的 状态吗 , 根据 状态码 去判断 是否 成功 
                    int code = conn.getResponseCode();
                    
                    // 200 ,  404 ,500, 302, 304 ..
                    
                    if(code==200){
                        
                        //进来 则表示 成功的处理的 请求, 返回了 数据
                        
                        // 获得返回的图片的 流数据
                        InputStream in = conn.getInputStream();
                        
                        //这已经是图片了
                        Bitmap bitmap = BitmapFactory.decodeStream(in);
                        
                        iv.setImageBitmap(bitmap);
                        
                        //子线程中发一个消息 出去
                        Message msg = new Message();
                        msg.obj = bitmap;
                        
                        
                        //放到 了 消息 队列 , messageQuerue中,  有 循环器looper 去 取出消息 ,
                        // 然后 再通知 去处理一下 
                        mHandler.sendMessage(msg);
                        
                        
                        
                        in.close();
                    }
                    
                    
                    //这里要连接网络, 会 耗费用户的 money, 所以需要去申请连接网络的权限
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            };
            
        }.start();
        // 连接网络的api  URL类 

你可能感兴趣的:(2018-03-07 网络连接与handler机制)