Apache HttpClient是一个开源项目,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。

在Apache HttpClient库中,我们常用的对网络连接有用的包主要有以下几类:

-org.apache.http.HttpResponse

-org.apache.http.client.HttpClient

-org.apache.http.client.methods.HttpGet

-org.apache.http.impl.client.DefaulfHttpClient

HttpClient httpclient=new DefaultHttpClient();

如果是从服务器检索信息,需要使用HttpGet类的构造器,例如以下代码:

<span style="font-size:18px;">HttpGet request=new HttpGet("http://google.com");</span>

然后用HttpClient类的execut()方法中的HttpGet对象来检索HttpResponse对象,例如下面代码:

<span style="font-size:18px;">HttpResponse response=client.execute(request);</span>

最后读取已检索的响应,例如下面代码:

<span style="font-size:18px;">BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));String line="";while ((line=rd.readLine())!=null) {System.out.println(line);}</span>

在Android系统中,可以采用HttpPost和HttpGet来封装Post请求和Get请求,然后使用HttpClient的execut()方法发送Post或者Get请求并返回服务器的响应数据。

Apache连网的基本流程如下:

1、设置连接和读取超时时间,并新建HttpClient对象,例如下面代码:

<span style="font-size:18px;">HttpParams httpParames=new BasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParames, 2000);HttpConnectionParams.setSoTimeout(httpParames, 2000);HttpClient httpClient=new DefaultHttpClient(httpParames);</span>

2、实现Get请求,例如下面代码:

<span style="font-size:18px;">HttpGet get = new HttpGet(uri);if (headers != null) {Set<String> setHead = headers.keySet();Iterator<String> iteratorHead = setHead.iterator();while (iteratorHead.hasNext()) {String headerName = iteratorHead.next();String headerValue = (String) headers.get(headerName);get.setHeader(headerName, headerValue);}}response = httpClient.execute(get);</span>

3、实现Post发送请求处理,例如下面代码:

<span style="font-size:18px;">HttpPost post = new HttpPost(uri);Set<String> setHead = headers.keySet();Iterator<String> iteratorHead = setHead.iterator();while (iteratorHead.hasNext()) {String headName = iteratorHead.next();String headValue = (String) headers.get(headName);post.setHeader(headName, headValue);}ContentProducer cp = new ContentProducer() {@Overridepublic void writeTo(OutputStream outstream) throws IOException {Writer writer = new OutputStreamWriter(outstream, "UTF-8");writer.write(requestBody);writer.flush();writer.close();}};HttpEntity entity = new EntityTemplate(cp);post.setEntity(entity);response = httpClient.execute(post);</span>

通常的Http实体需要在执行上下文的时候动态生成的。HttpClient的提供使用EntityTemplate实体类和ContentProducer接口支持动态实体。ContentProducer中是通过写需求的内容到一个输出流,每次请求的时候都会产生。因此,通过EntityTemplate创建实体通常是独立的,重复性好。

4、通过Response响应请求,例如下面代码:

<span style="font-size:18px;">if(response.getStatusLine().getStatusCode()==200){byte[] result=EntityUtils.toByteArray(response.getEntity());if(result!=null){String str=new String(result,"UTF-8");}}</span>

上面这段代码如果直接调用toString()方法,可能会导致某些中文字符出现乱码的情况,所以使用toByteArray()方法,如果需要转换成String对象,可以先调用EntityUtils.toByteArray()方法,将消息实体转成byte的数组,再由new String[byte[] bArray]转换成字符串。

以上几个步骤就实现了连网处理数据交互。

Apache的核心功能是HttpClient,通过下面几行代码就能发出一个简单的Get请求并打印响应结果:

<span style="font-size:18px;">try {//创建一个默认的HttpClientHttpClient httpClient=new DefaultHttpClient();//创建一个Get请求HttpGet request=new HttpGet(uri);//发送Get请求,并响应内容转换成字符串String response=httpClient.execute(request,new BasicResponseHandler());} catch (Exception e) {e.printStackTrace();}</span>

如果同时有多个请求需要处理时,我们可以使用多线程,HttpClient提供了创建线程安全对象的API,例如下面代码:

<span style="font-size:18px;">private static final String CHARSET=HTTP.UTF_8;private static HttpClient httpClient;private HttpTest(){}public static synchronized HttpClient getHttpClient(){if(null==httpClient){HttpParams params=new BasicHttpParams();//设置参数HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);HttpProtocolParams.setContentCharset(params, CHARSET);HttpProtocolParams.setUseExpectContinue(params, true);HttpProtocolParams.setUserAgent(params, "Mozilla/5.0(Linux,U;Android 4.0;en-us;.....)");//从连接池中取连接的超时时间ConnManagerParams.setTimeout(params, 2000);//连接超时HttpConnectionParams.setConnectionTimeout(params,2000);//请求超时HttpConnectionParams.setSoTimeout(params, 2000);//设置HttpClient支持HTTP和HTTPS两种模式SchemeRegistry sr=new SchemeRegistry();sr.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));sr.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 440));//使用线程安全的连接管理来创建HttpClientClientConnectionManager ccm=new ThreadSafeClientConnManager(params, sr);httpClient=new DefaultHttpClient(ccm,params);}return httpClient;}</span>

在上面代码中,使用ThreadSafeClientConnManager 来创建线程安全的HttpClent。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/42836319 情绪控_

Android之Apache接口相关推荐

  1. Android中Parcelable接口用法

    --  通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...

  2. [转]android之Apache Http——向服务器发送请求的同时发送参数

    android之Apache Http--向服务器发送请求的同时发送参数 使用Get方法提交: 其他步骤与上一节的操作相符,只是在传送地址的时候发送参数的格式如下: //Sname和Sage是实际的数 ...

  3. Android 中的接口回调

    Android 中的接口回调 转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html

  4. wemall app商城源码Android之支付宝接口公用函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之 ...

  5. android百度天气接口api接口,百度天气接口api

    百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ...

  6. Unity3D调用Android提供的接口

    需求:Android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供Unity3D调用 1.编写相关的android接口 在studio中新建工程,并 ...

  7. Zebra 打印机 Android 端驱动接口开发及调用案例

    文章目录 Zebra 打印机 Android 端驱动接口开发及调用 GitHub 源码 开发步骤 环境配置 Zebra SDK 资源下载 Android 开发环境搭建 新建Android项目 新建 A ...

  8. Android手机应用接口大全

    Android手机应用接口大全 Android Socket Google C C++  显示网页: 1. Uri uri = Uri.parse("http://www.google.co ...

  9. APP手机应用(android和ios)接口(restcontroller, @ResponseBody)

    获取[下载地址]   QQ: 313596790   [免费支持更新] 支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [ 新录针对本系统的视频教 ...

最新文章

  1. mongodb-创建索引
  2. 【笔记】MAC上使用onedrive遇到的问题及解决方法
  3. 超详细Mysql的安装与卸载
  4. Android 3D开发,OpenGL ES 的使用(一)
  5. Killzone's AI: dynamic procedural combat tactics
  6. There are multiple modules with names that only differ in ca
  7. Silverlight HTML5 Flash - RIA技术之三足鼎立
  8. 云开发是啥?看看它在编程导航项目的实践
  9. keepalive配置mysql自动故障转移
  10. MySQL 数据库基础
  11. 关于matlab中 CC = bwconncomp(A,4)命令的问题
  12. @RequestParam使用须知
  13. 计算机硬件英语单词有哪些,计算机硬件英语词汇
  14. 基于vue,解决打开新窗口被浏览器拦截的问题
  15. Conflux CTO伍鸣、研究总监杨光分别出席CoinDesk发布会及YOUChain大会
  16. Candence学习篇(7)allegro pcb editor 17.2如何打开旧版本.brd和.dra文件等
  17. /lib//libclntsh.so: file format not recognized; treating as linker script
  18. LWIP开发 | scoket | tcp | client
  19. 待我代码编成 娶你为妻可好
  20. JDBC编程和DAO设计模式

热门文章

  1. Linux 中文件管理常用的工具
  2. 如何搭建亿级社交信息分享社交平台架构
  3. javascript中将整数添加千位符号
  4. Mozilla停止对Firefox Hello的支持(采访)
  5. MVC使用 Elmah 日志记录组件
  6. Autofac 解释第一个例子 《第一篇》
  7. C#中数据类型转换-隐式转换
  8. Android Thread interrupt 中断JAVA线程(转)
  9. combobox数据获取及使用总结
  10. puppet原理及配置