Handler机制的初级应用

第一步:建立一个子线程
new Thread(){
}
第二步:重写thread的run()方法
第三步:确定网址path
String path = "192.168.1.100:8080/dd.jpg";
第四步:把网址封装成一个url对象
URL url = new URL(path);
获取客户端和服务器的连接对象,此时还没有建立连接,对连接对象进行初始化
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
设置请求方法,注意大写
conn.setRequestMethod("GET");
设置读取时间,如果超过5秒,连接超时
conn.setReadTimeout(5000);
设置连接时间,如果超过5秒,读取超时
conn.setConnectTimeout(5000);
发送请求,与服务器建立连接
conn.connect();
进行判断,如果响应码为200,说明请求成功
if(conn.getResponseCode()) == 200
获取服务器响应头中的流,流里的数据就是客户端请求的数据
InputStream is = conn.getInputStream();
读取出流里的数据,并构造成位图对象
Bitmap bm = BitmapFactory.decodeStream(is);
创建message对象
Message msg = new Message();
消息对象可以携带数据
msg.obj = bm;
msg.what = 1;                        
把消息发送至主线程的消息队列
handler.sendMessage(msg);
第五步:在主线程中创建一个handler对象
第六步:在主线程中修改UI

最后别忘类添加网络权限
public class MainActivity extends Activity {
private String path="http://192.168.1.100:8080/dd.jpg";
    private  ImageView iv;
    private Bitmap bm;
    private Message msg;
    private Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg){
            switch(msg.what){
            case 1:
                iv.setImageBitmap((Bitmap)msg.obj);
                break;

            case 0:
                Toast.makeText(MainActivity.this, "请求失败", 0).show();
                break;
            }
        }
    };

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

    }

public void click(View v){
    new Thread(){
        
    public void run(){
        
    
try {
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   
    conn.setRequestMethod("GET");//必须大写
    conn.setConnectTimeout(3000);
    conn.setReadTimeout(3000);
    conn.connect();
    if(conn.getResponseCode()==200){
         InputStream is = conn.getInputStream();
            bm = BitmapFactory.decodeStream(is);
        Message msg = new Message();
        msg.obj=bm;
        msg.what =1;
        handler.sendMessage(msg);
    }else{
        Message msg = new Message();
        msg.obj=bm;
        msg.what =0;
        handler.sendMessage(msg);
    }

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

    }
    }.start();    

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值