您的位置:首页 > 理论基础 > 计算机网络

在主线程中不能连接网络

2016-07-04 11:17 393 查看
1.消息机制的写法

[1]anr  Application not response 应用无响应  主线程(UI线程)

[2] 如果在主线程中进行了 耗时的操作(比如连接网络  拷贝大数据) Threa.sleep()

[3]避免anr  可以把耗时的操作   放到子线程中  自己在创建一个线程

[4]在4.0之后 谷歌强制要求连接网络不能再主线程进行访问

[6]消息机制  Handler(助手)

//在主线程中创建一个handler

private Handler handler=new Handler(){

//这个方法是在主线程里执行的 
public void handleMessage(android.os.Message msg){
//所以就可以在主线程里面更新UI了

String content=(String) msg.obj;
tv_result.setText(content);

};
};

 

//在点击事件中创建一个子线程

public void click(View v) {

//[2.0]创建一个子线程
new Thread(){public void run(){

try {
//[2.1] 获取源码路径
String path=et_path.getText().toString().trim();
//[2.2]创建URL  指定我们要访问的路径
URL url=new URL(path);
//[2.3]拿到httpURLconnection对象 用于接收或发送数据
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//[2.4]发送GET请求  系统默认就是GET请求
conn.setRequestMethod("GET");
//[2.5]设置请求时间
conn.setConnectTimeout(5000);
//[2.6]获取服务器返回的状态吗
int code=conn.getResponseCode();
//[2.7]如果code==200 说明返回成功

if(code==200){
//[2.8]获取服务器返回的数据 一流的形式返回的 由于把流转换回字符串是常见的操作 所以抽出一个工具类(utils)
InputStream in=conn.getInputStream();

//[2.9]使用我们定义的工具类 把in转换成String

String content=StringTools.readStream(in);

//穿件message对象
Message msg=new Message();
msg.obj=content;

//拿着我们创建的handler 告诉系统 说我要跟新ui
handler.sendMessage(msg);
//发了一条消息 消息(msg)里把数据放到msg里handlemessage方法就会执行

//[2.9.1]把流里面的数据展示到textview上
//tv_result.setText(content);
}

} catch (Exception e) {

e.printStackTrace();
}

};}.start();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: