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
- android学习日记-3 Apache的HttpClient
- 为 Android 开发访问 JAX-RS Web 服务的 Apache HttpClient 客户端 学习创建 Apache HttpClient Android 客户端
- Android的网络应用-使用Apache HttpClient
- Android Studio无法使用Apache的HttpClient
- 【Android基础知识】Apache HttpClient的基本使用
- Android--Apache HttpClient
- Android--Apache HttpClient
- Android--Apache HttpClient
- Android--Apache HttpClient
- Android apache httpClient
- Android Apache HttpClient
- org.apache.commons.httpclient.HttpClient 学习
- apache的HttpClient应用
- apache HttpClient的使用
- apache HttpClient学习系列---1
- Android中利用apache的httpclient实现文件的上传
- Apache HttpComponents学习笔记(四):HttpClient里的HttpRoute
- Android--Apache HttpClient(一)
- Oracle 共享池的调整与优化(Shared pool Tuning)
- 采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)
- c++类中的static新发现
- [python]json
- -bash: id: command not found -bash: tty: command not found
- android学习日记-3 Apache的HttpClient
- [python]django
- MFC richedit多行显示
- 帮你理解多线程
- 网线直接插电脑能上网 接路由器就连不上了
- 跳河的兔子
- 企业架构介绍
- <转>TCP/IP、Http、Socket的区别
- cocos2d之Box2D详解 鼠标关节实现