关于Android 网络接口,android.net.* 实际上是通过对Apache 的HttpClient 的封装来实现的 一个HTTP 编程接口,它实现了HttpClient 接口,同时还提供了HTTP 请求队列管理,以及HTTP 连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等 接口。AndroidHttpClient 等类从2.2 版,也就是API Level 8 才开始提供。
AndroidHttpClient 不允许在主线程里启动,如果看到“This thread forbids HTTP requests,则 表示在主线程中使用了AndroidHttpClient。因为这个原因,在处理Android 网络接口,就不能和 Java 标准网络接口和Apache 网络接口那样轻易地做网络操作。那么,Android 网络接口是怎样操 作网络的呢?这时候就引进了异步的概念,在Android 平台中,它提供非常好的异步接口 AsyncTask。 AsyncTask 是Android 1.5 提供的一个工具类,它使创建需要与用户界面交互的长时间运行的任 务变得更简单。不需要借助线程和Handler 即可实现。后续有一个异步下载的例子会详细讲解,此 处不作详细研究 实例: 下面看AndroidHttpClient 结合AsyncTask 完成网络操作的一个简单例子
package com.pms.main; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.content.Context; import android.net.http.AndroidHttpClient; import android.os.AsyncTask; import android.os.Bundle; import android.widget.TextView; public class NetAndroidActivity extends Activity { TextView textView_1 = null; String httpUrl = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 得到控件 textView_1 = (TextView) this.findViewById(R.id.textView_1); //调用AsyncTask NetAndroidTask task = new NetAndroidTask(this); //执行异步,并传入参数列表 task.execute("http://192.168.1.7:8080/exa/index.jsp","testParam1=110","testParam 2=NetAndroidActivity"); } class NetAndroidTask extends AsyncTask { //构造函数 public NetAndroidTask(Context context) { } @Override protected String doInBackground(String... params) { //声明变量 AndroidHttpClient client = null; HttpGet httpRequest = null; HttpResponse httpResponse = null; try { httpUrl = params[0]+"?"+params[1]+"&"+params[2];//通过参数列表组装路径 // 构造AndroidHttpClient 的实例 client = AndroidHttpClient.newInstance("Android"); // 创建HttpGet 方法,该方法会自动处理URL 地址的重定向 httpRequest = new HttpGet(httpUrl); // 请求HttpClient,取得HttpResponse httpResponse = client.execute(httpRequest); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_ OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse .getEntity()); return strResult; } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭连接 if (client != null) client.close(); } return null; } @ Override protected void onPostExecute(String result) { // 返回HTML 页面的内容 textView_1.setText(result); } } }
“代码解释” 代码中,向http://192.168.1.7:8080/exa/index.jsp 分别传入了两 个参数, 注意task.execute() 传递的参数列表和接收数时 params[0] 、params[1]、params[2]分别接收传递的参数。
该例子用的是GET 提交方式,但Post 方式 核心代码基本上和Apache 网络接口的Post 方式相同。本例中得到网络连接实例是通过 AndroidHttpClient.newInstance()得到,Apache 网络接口是通过new DefaultHttpClient()。
3 种网络连接的方法在以上例子中都作了简单介绍,在正常开发应用中,读者可以按照应用网 络特点和自己爱好选择运用哪种操作方式,一般有具有Java 编程基础的读者往往会选择Java 标准 接口,追求简洁、快速开发的会选择Apache 网络接口,可能因为Android 网络接口在2.0 版本才 被运用,以及主线程中不允许使用造成很多开发者不去运用它。但Android 网络接口是对Apache 网络接口的完美封装,更加适合Android 平台的开发和运用。 在真正Android 网络开发过程中,面对复杂的网络操作和多变的情况,仅仅学会上面3 种是不 行的,但基础部分还是这些

更多相关文章

  1. Android(安卓)的网络编程(9)-流量统计TrafficStats类的使用
  2. android 通过占位符来动态获得字符串资源
  3. Android开发之获取手机网络状态及网络是否连接
  4. Android(安卓)Launcher2 icon大小修改
  5. Debug Android(安卓)and Linux suspend and resume (中文)
  6. 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详
  7. Android(安卓)Api 常用类库包介绍
  8. 网络请求框架AsyncHttpclient的简单使用
  9. Android常用功能实例 如IMEI号

随机推荐

  1. android 开发不容错过的网站
  2. android 中margin,padding,border的区别
  3. 安卓开发笔记(三)android 相对布局属性
  4. Android之布局属性归纳
  5. Android Framework(I)Android Spring Jso
  6. Android中layout属性大全
  7. android总结
  8. Android 自学杂记
  9. Android Studio中快速替换styles的正则表
  10. Android 网络编程 目录