Android联网必须在子线程中操作以及消息机制的写法

Android联网必须在子线程中操作。

为波密等地区用户提供了全套网页设计制作服务,及波密网站建设行业解决方案。主营业务为成都网站设计、网站制作、波密网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

子线程不能修改UI,修改UI必须在主线程。

主线程又叫UI线程。

以下代码是在郑州app开发Android编写页面代码查看器的时候出现的代码。其中关于Android联网必须在子线程中操作,子线程不能修改UI,修改UI必须在主线程。这些都体现在MyonClicklistener这个方法里面了。

protected void onCreate(bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

     

        et_url = (EditText) findViewbyId(R.id.et_url);

        btn_show = (button) findViewbyId(R.id.btn_show);

        tv_code = (TextView) findViewbyId(R.id.tv_code);

        et_url.setText("http://10.0.2.2:8080");

     

        btn_show.setOnClickListener(new MyonClicklistener());

        String name = Thread.currentThread().getName();

        Toast.makeText(this, name, Toast.LENGTH_SHORT).show();

    }

private class MyonClicklistener implements OnClickListener{

@Override

public void onClick(View v) {

new Thread(){

public void run() {

//获取url

String path = et_url.getText().toString().trim();

try {

URL url = new URL(path);

//拿着url联网

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

//设置请求的方法 方法要大写 默认采用的GET方式请求

connection.setRequestMethod("GET");

//设置连接超时的时间

connection.setConnectTimeout(10000);

//获取响应码

int code = connection.getResponseCode();

//判断响应码 如果是200

if(code==200){

//联网后获取响应内容

//通过textview 展示对应的内容

InputStream inputStream = connection.getInputStream();

String result = Utils.getStringFromStream(inputStream);

//不能直接修改界面 而是要通知主线程 获取到了数据 并且把数据丢给主线程 在主线程中显示

//②通过handler发送消息 Message 把要更新界面用到的数据 通过Message 携带数据

Message msg = new Message();

msg.what = 1;

msg.obj = result;

handler.sendMessage(msg);

//修改textview内容展示数据

//tv_code.setText(result);

}

} catch (Exception e) {

e.printStackTrace();

runOnUiThread(new Runnable() {

@Override

public void run() {

//这里的代码一定会执行在主线程中

Toast.makeText(MainActivity.this, "网络连接异常", Toast.LENGTH_SHORT).show();

}

});

}

};

}.start();

}

}

总结下,消息机制的写法,如下几个步骤。

①在主线程中创建一个Handler对象 并且重写handleMessage方法

②在子线程需要更新UI的地方 通过handler发送消息

2.1创建一个message

2.2如果有数据需要携带 通过message.obj携带数据

2.3通过handler的sendMessage方法 发送消息

③在handlerMessage方法中 接受消息 更新界面


当前标题:Android联网必须在子线程中操作以及消息机制的写法
文章源于:http://myzitong.com/article/sccgci.html