以下是MainActiviy.java,有必要的注释,里面用到了handler,以及线程,workThread如何更新mainThread才能够更新的内容。

  1. package com.wyl.httptest2;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7.  
  8. import org.apache.http.HttpResponse;
  9. import org.apache.http.client.ClientProtocolException;
  10. import org.apache.http.client.HttpClient;
  11. import org.apache.http.client.methods.HttpGet;
  12. import org.apache.http.impl.client.DefaultHttpClient;
  13.  
  14. import android.os.Bundle;
  15. import android.os.Handler;
  16. import android.os.Message;
  17. import android.support.v7.app.ActionBarActivity;
  18. import android.view.View;
  19. import android.view.View.OnClickListener;
  20. import android.widget.Button;
  21. import android.widget.EditText;
  22.  
  23. public class MainActivity extends ActionBarActivity {
  24. Button btn;
  25. Button btn2;
  26. EditText et;
  27. Handler myhandler = new myHandler();
  28. @Override
  29. protected void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_main);
  32. btn = (Button)findViewById(R.id.btnId);
  33. btn2 = (Button)findViewById(R.id.btnId2);
  34. MyOnclickListener l = new MyOnclickListener();
  35. et = (EditText)findViewById(R.id.editTextId);
  36. btn.setOnClickListener(l);//绑定监听器
  37. btn2.setOnClickListener(l);
  38. }
  39.  
  40. class MyOnclickListener implements OnClickListener{
  41. @Override
  42. public void onClick(View v) {
  43. if(v.getId()==R.id.btnId){
  44. //原则:UI中的主线程不能够直接访问网络
  45. System.out.println("====线程名:"+Thread.currentThread().getName());
  46. getInternetThread myThread = new getInternetThread();
  47. myThread.start();
  48. }else if(v.getId()==R.id.btnId2){
  49. System.out.println("你点了清除按钮,");
  50. //如果是清除按钮,那么editText中的内容
  51. et.setText("");
  52. }
  53. }
  54. }
  55. /*
  56. * 原理:因为Looper会自动地从队列里去取数据,然后自动调用继承了Handler对象的类的复写了的
  57. * public void handleMessage(Message msg){}这个方法。
  58. * 继承Handler的目的:
  59. * 为了把从workThread获取的数据写入到UI中(Android中UI线程,即主线程是不能够访问网络的)
  60. * @author Administrator
  61. *
  62. */
  63. class myHandler extends Handler{
  64. @Override
  65. public void handleMessage(Message msg) {
  66. //打印出来是main线程,这样我们就可以直接把msg的值取出来了,
  67. System.out.println("====我是什么线程呢:"+Thread.currentThread().getName());
  68. //取出msg(取出msg.obj),这个绑定的obj属性才是我们真正要的值
  69. String fhz = (String)msg.obj;
  70. et.setText(fhz);
  71. }
  72. }
  73. /*
  74. * 主线程(即前台点击事件相关的线程)不能够直接访问网络,那么就通过主线程启动
  75. * getInternetThread这个新线程(肯定就是workThread了),然后通过这个workThread进行
  76. * 网络的访问,并且这个线程把网络数据绑定到msg的obj属性上(只要走到这一步就行了,update
  77. * 前台UI中的数据只需要交给继承了Handler的类的复写的Handler中的public void handleMessage(Message msg)
  78. * 这个方法,这个方法会自动执行。)
  79. * @author Administrator
  80. *
  81. */
  82. class getInternetThread extends Thread{
  83. String line = "我是空";
  84. @Override
  85. public void run() {
  86.  
  87. System.out.println("线程名:"+Thread.currentThread().getName());
  88. //获取EditText 控件里的 uri
  89. String uri = et.getText().toString();
  90. if(!uri.contains("http://")){
  91. //如果网址不包含htt://的话那么就不能够正常访问网络
  92. Message m = myhandler.obtainMessage();
  93. m.obj = "仙人板板的,你的网址没有http://!!!";
  94. myhandler.sendMessage(m);
  95. return;
  96. }
  97. System.out.println("uri的值:"+uri);
  98. //访问网络
  99. //获取客户端对象
  100. HttpClient client = new DefaultHttpClient();
  101. //获取请求对象,并传入uri
  102. HttpGet get = new HttpGet(uri);
  103. //客户端发送请求对象
  104. try {
  105. HttpResponse resp = client.execute(get);
  106. //获取状态码,如果是200说明成功
  107. int code = resp.getStatusLine().getStatusCode();
  108. if(code == 200){
  109. //获得返回值
  110. InputStream in = resp.getEntity().getContent();
  111. BufferedReader reader = new BufferedReader(new InputStreamReader(in));
  112. line = reader.readLine();
  113. }
  114. } catch (ClientProtocolException e) {
  115. e.printStackTrace();
  116. } catch (IOException e) {
  117. e.printStackTrace();
  118. }
  119. // et.setText(line);//设置EditText的值
  120. Message msg = myhandler.obtainMessage();
  121. msg.obj = line;//这一步就把我们需要写到UI中的内容绑定到了msg上
  122. myhandler.sendMessage(msg);
  123. }
  124. }
  125. }

  

Android访问网络(可以正常使用)的更多相关文章

  1. Android访问网络

    Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包.安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用. 以下是MainAc ...

  2. [转]Android访问网络,使用HttpURLConnection还是HttpClient

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有 ...

  3. Android访问网络,使用HttpURLConnection还是HttpClient?

    本文转自:http://blog.csdn.net/guolin_blog/article/details/12452307,感谢这位网友的分享,谢谢. 最近在研究Volley框架的源码,发现它在HT ...

  4. [转]android访问网络:java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused

    这对刚学会向tomcat模拟的本地服务器发送请求的同学非常重要! 转自:http://wing123.iteye.com/blog/1873763 描述:在做注册功能的时候,向本地服务器:127.0. ...

  5. Android访问网络数据的几种方式Demo

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看 ...

  6. android访问网络--okhttp

    import com.squareup.okhttp.MediaType;import com.squareup.okhttp.OkHttpClient;import com.squareup.okh ...

  7. .Net程序员安卓学习之路2:访问网络API

    做应用型的APP肯定是要和网络交互的,那么本节就来实战一把Android访问网络API,还是使用上节的DEMO: 一.准备API: 一般都采用Json作为数据交换格式,目前各种语言均能输出Json串. ...

  8. 深入学习Android有关网络连接的内容

    基于实际项目中碰到的些许问题,开始重新深入学习Android网络连接有关知识. Android的4.1.2版本的AndroidHttpClient模块setSoTimeout之后实际超时时间和设置的时 ...

  9. android 使用httpclient访问网络

    在主活动类中,调用一个线程访问网络(android4.0以上耗时的操作不能放在主线程中):       //声明两个Button对象,与一个TextView对象private TextView mTe ...

随机推荐

  1. ThinkPHP第二十天(getField用法、常用管理员表结构、树形结构前小图标CSS)

    1.getField($fields,$sepa=null) A:当$fields为1个字段,$sepa=null的时候,返回一个符合条件的记录的字段. B:如果要取得所有符合条件记录字段,需要$se ...

  2. YII框架下实现密码修改

    YII2 实现修改密码功能 主要难点: 1.密码加密 YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数 ...

  3. Net Core WebAPI

    Net Core WebAPI .Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以 ...

  4. C#使用系统的“显示桌面”功能(Shell.Application)

    原文 C#使用系统的“显示桌面”功能(Shell.Application) 在 Windows 系统的 任务栏 上的 快速启动栏 里,通常有一个图标  ,点击这个图标,就会切换到桌面.这个图标实际是一 ...

  5. HDU 1157 Who's in the Middle

    #include <cstdio> #include <algorithm> using namespace std; int main() { int n; while(sc ...

  6. Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现

    上一篇转载的博文里讲到了怎么开启状态栏透明的效果,不过如果在有ActionBar的情况下,会出现状态栏透明而ActionBar横亘在状态栏和内容之间的丑陋情况,如下图: 通过百度之后,发现了GitHu ...

  7. Node log4js

    一个完善的项目,日志是必不可少的一部分,在node开发中,调试成了让开发者头疼的部分,因此日志成为在node中帮助调试的一个重要模块. 一.Node使用Log4js 1.使用npm工具,在命令行中 执 ...

  8. Objective-c 类的继承 方法重写 方法重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...

  9. CSS中 清除浮动解决“包含问题”

    今天看到大神对浮动定位作了个详细的分析  刚好就分析了当时任务三遇到的问题 在一个div中定义了三个div,让横向排列,结果父元素div的背景色显示不出来了 ,这是个经典问题----包含浮动 < ...

  10. Enze fifth day(循环语句2)

    又是新的一周开始了,我还在云和学院继续学习.因为想要急切的想学会更多的知识,所以我有些急.可是我越急就越容易出错,这应该就是所谓的欲速则不达吧.这一周,我要重新把控好自己的一切,尽我最大的努力来学习! ...