android学习日记-3 Apache的HttpClient
2014-05-07 17:38
375 查看
1 需要现在配置文件中manifest中注册网络:
2 封装方法:
3 MainActivity中调用
oncreate()方法中:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2 封装方法:
package com.znn.roundprogress; import java.util.ArrayList; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; public class HttpClientUtli { private static HttpClient httpClient; private HttpClientUtli() { } private static synchronized HttpClient getHttpClient() { if (null == httpClient) { // 设置一些基本参数 HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpProtocolParams.setUseExpectContinue(params, true); HttpProtocolParams.setUserAgent(params, System.getProperty("http-agent")); /* 从连接池中取连接的超时时间 */ ConnManagerParams.setTimeout(params, 1000); HttpConnectionParams.setConnectionTimeout(params, 2000); /* 请求超时 即从服务器获取响应数据需要等待的时间,此处设置为4秒。 */ HttpConnectionParams.setSoTimeout(params, 4000); /* * Scheme类表示一个协议方案,例如"http"或者"https"和包含许多的协议属性, * 例如缺省的端口和socket工厂常用于为指定的协议创建java * .net.Socket实例,SchemeRegistry类被用来维护一个Schemes的集合 * 设置我们的HttpClient支持HTTP和HTTPS两种模式 */ SchemeRegistry schReg = new SchemeRegistry(); schReg.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 80)); schReg.register(new Scheme("https", SSLSocketFactory .getSocketFactory(), 443)); /* * 初始化httpclient会话连接管理器 * HTTP连接是复杂、有状态的,非线程安全的对象需要适当的管理正确的功能。HTTP连接每次仅被一个执行的线程使用, * HttpClient利用一个特殊的实体管理访问HTTP连接 * ,称为HTTP连接管理器,由ClientConnectionManager接口表示。 * HTTP连接管理器的充当一个新的HTTP连接工厂,管理持续的连接和同步的访问持续的连接,确保每次只有一个线程能访问连接。 */ ClientConnectionManager conMgr = new ThreadSafeClientConnManager( params, schReg); /* * 初始化httpClient并加入会话连接管理器,此步很重要,对于使用httpclient多线程并发访问服务系统很有用 * HttpClient最重要的功能是执行HTTP方法。执行一个HTTP方法涉及一个或多个HTTP请求/ HTTP响应信息交流, * 通常是由HttpClient内部处理。用户提供一个请求对象,HttpClient发送请求到目标服务器, * 希望服务器返回一个相应的响应对象,或者抛出一个异常(如果执行失败)。 */ httpClient=new DefaultHttpClient(conMgr,params); } return httpClient; } public static String doPost(String path,Map<String,String> map){ HttpClient httpclient =getHttpClient(); HttpPost httpPost=new HttpPost(path); ArrayList<NameValuePair> list=new ArrayList<NameValuePair>(); for(Map.Entry<String, String>entry:map.entrySet()){ list.add(new BasicNameValuePair(entry.getKey(),entry.getValue())); } try{ httpPost.setEntity(new UrlEncodedFormEntity(list,HTTP.UTF_8)); httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); httpPost.addHeader("Connection","keep-alive"); httpPost.addHeader("Referer","Android"); HttpResponse response=httpclient.execute(httpPost); // int i=response.getStatusLine().getStatusCode(); // System.out.println("response.getStatusLine().getStatusCode()"+i); //如果状态码是200,则正常返回 if(response.getStatusLine().getStatusCode()==200){ //获得返回的字符串 String body=EntityUtils.toString(response.getEntity()); System.out.println(body); //如果是下载的文件,可以用response.getEntity().getContent返回InputStream return body; }else{ return null; } }catch(Exception e){ e.printStackTrace(); return null; } } public static String doGet(String path){ HttpClient httpclient=getHttpClient(); try{ HttpGet httpGet=new HttpGet(); httpGet.addHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); httpGet.addHeader("Connection","keep-alive"); httpGet.addHeader("Referer","Android"); HttpResponse response=httpclient.execute(httpGet); if(response.getStatusLine().getStatusCode()==200){ String body=EntityUtils.toString(response.getEntity()); System.out.println(body); return body; }else{ return null; } }catch(Exception e){ e.printStackTrace(); return null; } } }
3 MainActivity中调用
oncreate()方法中:
new Thread(){ public void run() { // HttpClientUtli.doPost(); Map<String, String> map = new HashMap<String, String>(); map.put("uname", "qdzs"); map.put("passwd", "13356235875"); String ss=HttpClientUtli.doPost(" http://zningning.duapp.com/qdhelper/new/user/getdetail.php", map); System.out.println("http"+ss); // HttpClientUtli.doGet(" http://www.baidu.com"); }; }.start();
相关文章推荐
- 为 Android 开发访问 JAX-RS Web 服务的 Apache HttpClient 客户端 学习创建 Apache HttpClient Android 客户端
- 【实战】(二)android模拟qq登录(apache的httpClient发送get和post请求)
- 【Android】Android2.3版本以上谷歌为何推荐使用HttpURLConnection却弃用 Apache HttpClient
- Android apache httpClient
- apache HttpClient 学习系列--2 之HttpContext
- Android学习之HttpClient练习(一)
- java apache commons HttpClient发送get和post请求的学习整理
- Android程序报错:程序包org.apache.http不存在——Android 6.0已经不支持HttpClient
- android studio没有org.apache.http.client.HttpClient;等包问题 解决方案
- Android 网络操作学习HttpURLConnection与HttpClient及网络框架选择
- Android 6.0删除Apache HttpClient相关类的解决方法
- Android--Apache HttpClient
- 【Android进阶学习】Http编程之HttpClient
- apache HttpClient 学习系列--2 之HttpContext
- Android compileSdkVersion 23 导致apache网络库HttpClient过期问题
- Android 6.0 使用 Apache HttpClient
- android系统内置HttpClient库(WebView+ Http(s)URLConnection(ok-http)+ HttpClient(apache-http))
- Android 开发学习记录(4)---- httpclient使用(三)
- android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据
- apache httpclient 4 学习和例子