要和后台进行通信

一开始发现接不到数据

后来发生了线程错误

在网上查到:在一些高版本中,与网络通信的操作因为要花费比较大的时间,所以应该放在单独的线程中去做。

但为什么一些网上demo没有放在单独的线程中呢?因为那些例子是基于低版本的,低版本不强制要求这么做。

至于线程,因为要改变主UI

用到handler,简单的业务逻辑就是:

0.写好handler的内部操作

1.触发事件

2.进入新的线程

3. 将想返回的信息交给meeage,由handler.sendMessage(message)传回

4.进入handler操作,写入主UI

下面是代码:

public class MainActivity extends ActionBarActivity {
Button urlBtn ;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
urlBtn = (Button)findViewById(R.id.btn1);
text=(TextView)findViewById(R.id.textView);
urlBtn.setOnClickListener(myClick);
} public Handler handler = new Handler(){
public void handleMessage(Message msg){
text.setText(msg.obj.toString());
}
}; public View.OnClickListener myClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
urlGet();
}
}).start(); }
} ;
public void setText(){
String a = "123";
Message msg = new Message();
msg.obj = a;
// msg.what =1;
handler.sendMessage(msg); }
public void urlGet(){
String uri = "http://www.haosou.com/?&src=360com";
HttpGet request = new HttpGet(uri);
Message msg = new Message();
try{
HttpResponse httpResponse = new DefaultHttpClient().execute(request);
if(httpResponse.getStatusLine().getStatusCode()==200){
String result = EntityUtils.toString(httpResponse.getEntity()).trim();
msg.obj= result;
handler.sendMessage(msg);
}
else{
String error = "net has quesetions";
msg.obj = error;
handler.sendMessage(msg);
}
}catch(ClientProtocolException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
} } private String readInStream(InputStream in){
Scanner scanner = new Scanner(in).useDelimiter("\\A");
return scanner.hasNext()?scanner.next():"";
}
}

最新文章

  1. NodeJs之pm2
  2. sharepoint2013用户切换实现方式
  3. ecshop 批量生成订单信息
  4. logback.xml日志配置
  5. 【双标记线段树】bzoj1798维护序列seq
  6. Java—接口与抽象类
  7. iBatis.Net实现返回DataTable和DataSet对象
  8. Row_Number() OVER 的用法
  9. SQLite的 SQL语法总结
  10. Android 使用 RemoteViews 发送自定义通知 ,遇到 Couldn't expand RemoteViews问题总结
  11. chart画图
  12. Team Foundation Server 2015使用教程--团队项目创建
  13. 图解JOIN
  14. git add * 提示warning: LF will be replaced by CRLF in 解决办法
  15. python回归分析
  16. MyBatisPlus忽略映射字段注解
  17. Windows7 密码修改
  18. 关于缓冲的认识---Frame Buffer
  19. 命令提示符没办法登录MySQL
  20. 在同一个表中将varchar2类型的数据转存到blob类型的字段中

热门文章

  1. hibernate框架的搭建
  2. 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04
  3. 移动端或APP禁止放大标识
  4. Oracle11gExpress和PL/SQL Developer安装
  5. Cookie的创建、读取、删除
  6. Angular6路由复用与延迟加载的冲突解决——看看有备无患
  7. PAT 1036 Boys vs Girls
  8. CSS垂直居中的四种方法
  9. PHP性能检测与优化—XHProf 数据阅读
  10. 【CSAPP-南大视频】Week1-计算机系统概述