android学习日记-3 Apache的HttpClient

来源:互联网 发布:数据库认证哪个含金量 编辑:程序博客网 时间:2024/05/20 20:18

1 需要现在配置文件中manifest中注册网络:

<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();


0 0
原创粉丝点击