Android之Apache接口
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接口相关推荐
- Android中Parcelable接口用法
-- 通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...
- [转]android之Apache Http——向服务器发送请求的同时发送参数
android之Apache Http--向服务器发送请求的同时发送参数 使用Get方法提交: 其他步骤与上一节的操作相符,只是在传送地址的时候发送参数的格式如下: //Sname和Sage是实际的数 ...
- Android 中的接口回调
Android 中的接口回调 转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html
- wemall app商城源码Android之支付宝接口公用函数
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之 ...
- android百度天气接口api接口,百度天气接口api
百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ...
- Unity3D调用Android提供的接口
需求:Android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供Unity3D调用 1.编写相关的android接口 在studio中新建工程,并 ...
- Zebra 打印机 Android 端驱动接口开发及调用案例
文章目录 Zebra 打印机 Android 端驱动接口开发及调用 GitHub 源码 开发步骤 环境配置 Zebra SDK 资源下载 Android 开发环境搭建 新建Android项目 新建 A ...
- Android手机应用接口大全
Android手机应用接口大全 Android Socket Google C C++ 显示网页: 1. Uri uri = Uri.parse("http://www.google.co ...
- APP手机应用(android和ios)接口(restcontroller, @ResponseBody)
获取[下载地址] QQ: 313596790 [免费支持更新] 支持三大数据库 mysql oracle sqlsever 更专业.更强悍.适合不同用户群体 [ 新录针对本系统的视频教 ...
最新文章
- mongodb-创建索引
- 【笔记】MAC上使用onedrive遇到的问题及解决方法
- 超详细Mysql的安装与卸载
- Android 3D开发,OpenGL ES 的使用(一)
- Killzone's AI: dynamic procedural combat tactics
- There are multiple modules with names that only differ in ca
- Silverlight HTML5 Flash - RIA技术之三足鼎立
- 云开发是啥?看看它在编程导航项目的实践
- keepalive配置mysql自动故障转移
- MySQL 数据库基础
- 关于matlab中 CC = bwconncomp(A,4)命令的问题
- @RequestParam使用须知
- 计算机硬件英语单词有哪些,计算机硬件英语词汇
- 基于vue,解决打开新窗口被浏览器拦截的问题
- Conflux CTO伍鸣、研究总监杨光分别出席CoinDesk发布会及YOUChain大会
- Candence学习篇(7)allegro pcb editor 17.2如何打开旧版本.brd和.dra文件等
- /lib//libclntsh.so: file format not recognized; treating as linker script
- LWIP开发 | scoket | tcp | client
- 待我代码编成 娶你为妻可好
- JDBC编程和DAO设计模式