Android----http请求工具类
项目中客户端与服务器端采用http请求进行交互,在这里我把http请求的工具类贴出来。
该工具类采用的是HttpClients框架,HTTP保存方式有两种选择 :一种:整个应用 只创建 一个HttpClient对象,然后保存在整个程序中去。此情况无法创建多线程中应用。
另一种:随时创建HttpClient对象。系统自动保存Session就行。此情况可能对系统资源消耗利害
用完之后请随时销毁HttpClient,避免系统中存在很多HttpClient对象。在这里我采用的是第二种。
包含两个java文件,第一个是主要的请求工具类文件,第二个主要是保存请求的session,下面见代码:
[cpp]
package com.hlj.padtwo.util.util_public.httputil;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLHandshakeException;
import org.apache.http.Header;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.NoHttpResponseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpRequestRetryHandler;
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.client.params.HttpClientParams;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import com.hlj.padtwo.util.application.MyApplication;
/***
* Http通信中的POST和GET请求方式的不同。GET把参数放在URL字符串后面,传递给服务器。
* 而POST方法的参数是放在Http请求中,主要用于手机对Http访问提供公共的访问类对象。
* @author hlj
* @date
* @versionn 1.0
**/
public class HttpClients {
/** 执行downfile后,得到下载文件的大小 */
private long contentLength;
/** 返回连接失败信息 **/
private String strResult = "服务器无法连接,请检查网络";
/** http 请求头参数 **/
private HttpParams httpParams;
/** httpClient 对象 **/
private DefaultHttpClient httpClient;
/** 得到上下文 **/
private Context context;
private Activity activity = null;
public HttpClients(Activity act) {
this.context = act.getBaseContext();
this.activity = act;
getHttpClient();
}
/**
* 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
* params.put("usename","helijun"); params.put("password","123456");
* httpClient.doGet(url,params);
*
* @param url
* 请求地址
* @param params
* 请求参数
* @return 返回 String jsonResult;
*
* **/
@SuppressWarnings("unchecked")
public String doGet(String url, Map params) {
/** 建立HTTPGet对象 **/
String paramStr = "";
if (params == null)
params = new HashMap();
/** 迭代请求参数集合 **/
Iterator iter = params.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
String val = nullToString(entry.getValue());
paramStr += paramStr = "&" + key + "=" + URLEncoder.encode(val);
}
if (!paramStr.equals("")) {
paramStr = paramStr.replaceFirst("&", "?");
url += paramStr;
}
return doGet(url);
}
/**
* 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
* params.put("usename","gongshuanglin"); params.put("password","123456");
* httpClient.doGet(url,params);
*
* @param url
* 请求地址
* @param params
* 请求参数
* @return 返回 String jsonResult;
*
*/
public String
补充:移动开发 , Android ,