xutils 2.x(2.6)中的session获得和cookieStore使用

来源:互联网 发布:长空栈道 知乎 编辑:程序博客网 时间:2024/06/07 00:23

xutils框架是如今使用比较广泛的android开源框架,我对其也情有独钟,对于框架模块,我想大家都很熟悉了,就不多说了。我今天主要主要说下xutils2.6中如何为http请求设置cookiesession,当时这个问题纠结了很久,试了多次,问了不少人,上网搜索,结果越来越模糊,最终通过认真阅读源代码,终于清楚如何使用了,现在和大家分享一下自己的心得,也希望大家对开源框架的学习要认真阅读源代码。

     不多说了,大家看示例。

     程序设计到​​三个类,

    1.MyApplication(扩展应用)定义保存的Cookie和会话的全局变量

    2.LoginActivity演示获得的cookiesession

    3.GetDataActivity演示设置的cookie和session

import com.lidroid.xutils.util.PreferencesCookieStore;import android.app.Application;public class MyApplication extends Application{/** * 用PreferencesCookieStore 持久化cookie到本地  *   类的定义:public class PreferencesCookieStore implements CookieStore *   其内部用SharedPreferences保存,操作内部已封装 * 位置:com.lidroid.xutils.util.PreferencesCookieStore; *  * 特别注意:PreferencesCookieStore 这个类在xutils 2.6中才出现,以前的版本没有 *          xutils 3.x 版本中也没有这个类 *          在xutils 2.6 以前版本要么自己参照PreferencesCookieStore源码,保存cookie到本地 *          或者自己用SharedPreferences保存sessionid 到本地,sessionid就是一个字符串,用 *          SharedPreferences保存很简单,就不介绍了 *           * 注:sessionid  实际是保存在cookie中 *       向服务器可以提交cookie 或 sessionid *       提交cookie :调用方法 public HttpUtils configCookieStore(CookieStore cookieStore);  *       提交sessionid : RequestParams public void addHeader(String name, String value); *                       或setHeader(String name, String value); */public static PreferencesCookieStore presCookieStore;    public static String jsessionid = ""; //保存sessionidpublic void onCreate() {/* * 程序启动,调用这个构造函数 * 在构造函数中 PreferencesCookieStore内部从本地 * 取出cookie,保存在PreferencesCookieStore 中的队列中 * 如果本地没有,PreferencesCookieStore  public List<Cookie> getCookies(); * 返回的 List<Cookie> 长度为0 *  */presCookieStore = new PreferencesCookieStore(getApplicationContext());    }}


import java.util.List;import org.apache.http.client.CookieStore;import org.apache.http.cookie.Cookie;import org.apache.http.impl.client.DefaultHttpClient;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.RequestParams;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;public class LoginActivity {/** * 登陆 后获得cookie sessionid * 这儿只是演示如何获得cookie和seesionid * 因此 url,RequestParams 直接用null,大家注意 * */public void login(){final HttpUtils http = new HttpUtils();String url = null;RequestParams params = null;http.send(HttpMethod.POST, url,params, new RequestCallBack<String>() {@Overridepublic void onFailure(HttpException arg0, String arg1) {}@Overridepublic void onSuccess(ResponseInfo<String> arg0) {/* * 得到cookie seesionid 并持久化到本地的核心代码 */DefaultHttpClient defaultHttpClient = (DefaultHttpClient) http.getHttpClient();CookieStore cookieStore = defaultHttpClient.getCookieStore();List<Cookie> cookies = cookieStore.getCookies();for (Cookie cookie : cookies) {if ("JSESSIONID".equals(cookie.getName())) {MyApplication.jsessionid = cookie.getValue(); //得到sessionid}MyApplication.presCookieStore.addCookie(cookie); //将cookie保存在本地}}});}}


import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.RequestParams;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;/** * 从服务器获取数据前 添加cookie * 或sessionid *  * @author Administrator * */public class GetDataActivity {public void getData() {final HttpUtils http = new HttpUtils();String url = null;/* * get无参请求添加cookie * get 含参请求可以添加cookie或session * post请求可以添加cookie或session */http.configCookieStore(MyApplication.presCookieStore); http.send(HttpMethod.GET, url,  new RequestCallBack<String>() {@Overridepublic void onFailure(HttpException arg0, String arg1) {}@Overridepublic void onSuccess(ResponseInfo<String> arg0) {}});/* * seesionid字段在不同服务器开发语言中不同 * java中“JSESSIONID”,php中“PSESSIONID” 其他请自己查阅资料 * 这儿用java示例 *  * setHeader 和addHeader的区别: *   setHeader 未设置时,添加;已设置,重新赋值 *   addHeader 未设置时,添加;已设置,仍保持以前的值不变 */        RequestParams params = new RequestParams();        params.setHeader("Cookie", "JSESSIONID="+MyApplication.jsessionid); //设置头信息http.send(HttpMethod.GET, url,  new RequestCallBack<String>() {@Overridepublic void onFailure(HttpException arg0, String arg1) {}@Overridepublic void onSuccess(ResponseInfo<String> arg0) {}});}}

如果存在不足,请大家多多指教,共同进步!

参考Xutils2.6源代码

1.HttpUtils

package com.lidroid.xutils;import android.text.TextUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.*;import com.lidroid.xutils.http.callback.HttpRedirectHandler;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.DefaultSSLSocketFactory;import com.lidroid.xutils.http.client.HttpRequest;import com.lidroid.xutils.http.client.RetryHandler;import com.lidroid.xutils.http.client.entity.GZipDecompressingEntity;import com.lidroid.xutils.task.PriorityExecutor;import com.lidroid.xutils.util.OtherUtils;import org.apache.http.*;import org.apache.http.client.CookieStore;import org.apache.http.client.HttpClient;import org.apache.http.client.protocol.ClientContext;import org.apache.http.conn.params.ConnManagerParams;import org.apache.http.conn.params.ConnPerRouteBean;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.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.BasicHttpContext;import org.apache.http.protocol.HTTP;import org.apache.http.protocol.HttpContext;import java.io.File;import java.io.IOException;public class HttpUtils {    public final static HttpCache sHttpCache = new HttpCache();    private final DefaultHttpClient httpClient;    private final HttpContext httpContext = new BasicHttpContext();    private HttpRedirectHandler httpRedirectHandler;    public HttpUtils() {        this(HttpUtils.DEFAULT_CONN_TIMEOUT, null);    }    public HttpUtils(int connTimeout) {        this(connTimeout, null);    }    public HttpUtils(String userAgent) {        this(HttpUtils.DEFAULT_CONN_TIMEOUT, userAgent);    }    public HttpUtils(int connTimeout, String userAgent) {        HttpParams params = new BasicHttpParams();        ConnManagerParams.setTimeout(params, connTimeout);        HttpConnectionParams.setSoTimeout(params, connTimeout);        HttpConnectionParams.setConnectionTimeout(params, connTimeout);        if (TextUtils.isEmpty(userAgent)) {            userAgent = OtherUtils.getUserAgent(null);        }        HttpProtocolParams.setUserAgent(params, userAgent);        ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(10));        ConnManagerParams.setMaxTotalConnections(params, 10);        HttpConnectionParams.setTcpNoDelay(params, true);        HttpConnectionParams.setSocketBufferSize(params, 1024 * 8);        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);        SchemeRegistry schemeRegistry = new SchemeRegistry();        schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));        schemeRegistry.register(new Scheme("https", DefaultSSLSocketFactory.getSocketFactory(), 443));        httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(params, schemeRegistry), params);        httpClient.setHttpRequestRetryHandler(new RetryHandler(DEFAULT_RETRY_TIMES));        httpClient.addRequestInterceptor(new HttpRequestInterceptor() {            @Override            public void process(org.apache.http.HttpRequest httpRequest, HttpContext httpContext) throws org.apache.http.HttpException, IOException {                if (!httpRequest.containsHeader(HEADER_ACCEPT_ENCODING)) {                    httpRequest.addHeader(HEADER_ACCEPT_ENCODING, ENCODING_GZIP);                }            }        });        httpClient.addResponseInterceptor(new HttpResponseInterceptor() {            @Override            public void process(HttpResponse response, HttpContext httpContext) throws org.apache.http.HttpException, IOException {                final HttpEntity entity = response.getEntity();                if (entity == null) {                    return;                }                final Header encoding = entity.getContentEncoding();                if (encoding != null) {                    for (HeaderElement element : encoding.getElements()) {                        if (element.getName().equalsIgnoreCase("gzip")) {                            response.setEntity(new GZipDecompressingEntity(response.getEntity()));                            return;                        }                    }                }            }        });    }    // ************************************    default settings & fields ****************************    private String responseTextCharset = HTTP.UTF_8;    private long currentRequestExpiry = HttpCache.getDefaultExpiryTime();    private final static int DEFAULT_CONN_TIMEOUT = 1000 * 15; // 15s    private final static int DEFAULT_RETRY_TIMES = 3;    private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";    private static final String ENCODING_GZIP = "gzip";    private final static int DEFAULT_POOL_SIZE = 3;    private final static PriorityExecutor EXECUTOR = new PriorityExecutor(DEFAULT_POOL_SIZE);    public HttpClient getHttpClient() {        return this.httpClient;    }    // ***************************************** config *******************************************    public HttpUtils configResponseTextCharset(String charSet) {        if (!TextUtils.isEmpty(charSet)) {            this.responseTextCharset = charSet;        }        return this;    }    public HttpUtils configHttpRedirectHandler(HttpRedirectHandler httpRedirectHandler) {        this.httpRedirectHandler = httpRedirectHandler;        return this;    }    public HttpUtils configHttpCacheSize(int httpCacheSize) {        sHttpCache.setCacheSize(httpCacheSize);        return this;    }    public HttpUtils configDefaultHttpCacheExpiry(long defaultExpiry) {        HttpCache.setDefaultExpiryTime(defaultExpiry);        currentRequestExpiry = HttpCache.getDefaultExpiryTime();        return this;    }    public HttpUtils configCurrentHttpCacheExpiry(long currRequestExpiry) {        this.currentRequestExpiry = currRequestExpiry;        return this;    }    public HttpUtils configCookieStore(CookieStore cookieStore) {        httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);        return this;    }    public HttpUtils configUserAgent(String userAgent) {        HttpProtocolParams.setUserAgent(this.httpClient.getParams(), userAgent);        return this;    }    public HttpUtils configTimeout(int timeout) {        final HttpParams httpParams = this.httpClient.getParams();        ConnManagerParams.setTimeout(httpParams, timeout);        HttpConnectionParams.setConnectionTimeout(httpParams, timeout);        return this;    }    public HttpUtils configSoTimeout(int timeout) {        final HttpParams httpParams = this.httpClient.getParams();        HttpConnectionParams.setSoTimeout(httpParams, timeout);        return this;    }    public HttpUtils configRegisterScheme(Scheme scheme) {        this.httpClient.getConnectionManager().getSchemeRegistry().register(scheme);        return this;    }    public HttpUtils configSSLSocketFactory(SSLSocketFactory sslSocketFactory) {        Scheme scheme = new Scheme("https", sslSocketFactory, 443);        this.httpClient.getConnectionManager().getSchemeRegistry().register(scheme);        return this;    }    public HttpUtils configRequestRetryCount(int count) {        this.httpClient.setHttpRequestRetryHandler(new RetryHandler(count));        return this;    }    public HttpUtils configRequestThreadPoolSize(int threadPoolSize) {        HttpUtils.EXECUTOR.setPoolSize(threadPoolSize);        return this;    }    // ***************************************** send request *******************************************    public <T> HttpHandler<T> send(HttpRequest.HttpMethod method, String url,                                   RequestCallBack<T> callBack) {        return send(method, url, null, callBack);    }    public <T> HttpHandler<T> send(HttpRequest.HttpMethod method, String url, RequestParams params,                                   RequestCallBack<T> callBack) {        if (url == null) throw new IllegalArgumentException("url may not be null");        HttpRequest request = new HttpRequest(method, url);        return sendRequest(request, params, callBack);    }    public ResponseStream sendSync(HttpRequest.HttpMethod method, String url) throws HttpException {        return sendSync(method, url, null);    }    public ResponseStream sendSync(HttpRequest.HttpMethod method, String url, RequestParams params) throws HttpException {        if (url == null) throw new IllegalArgumentException("url may not be null");        HttpRequest request = new HttpRequest(method, url);        return sendSyncRequest(request, params);    }    // ***************************************** download *******************************************    public HttpHandler<File> download(String url, String target,                                      RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, null, false, false, callback);    }    public HttpHandler<File> download(String url, String target,                                      boolean autoResume, RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, null, autoResume, false, callback);    }    public HttpHandler<File> download(String url, String target,                                      boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, null, autoResume, autoRename, callback);    }    public HttpHandler<File> download(String url, String target,                                      RequestParams params, RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, params, false, false, callback);    }    public HttpHandler<File> download(String url, String target,                                      RequestParams params, boolean autoResume, RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, params, autoResume, false, callback);    }    public HttpHandler<File> download(String url, String target,                                      RequestParams params, boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {        return download(HttpRequest.HttpMethod.GET, url, target, params, autoResume, autoRename, callback);    }    public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,                                      RequestParams params, RequestCallBack<File> callback) {        return download(method, url, target, params, false, false, callback);    }    public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,                                      RequestParams params, boolean autoResume, RequestCallBack<File> callback) {        return download(method, url, target, params, autoResume, false, callback);    }    public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,                                      RequestParams params, boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {        if (url == null) throw new IllegalArgumentException("url may not be null");        if (target == null) throw new IllegalArgumentException("target may not be null");        HttpRequest request = new HttpRequest(method, url);        HttpHandler<File> handler = new HttpHandler<File>(httpClient, httpContext, responseTextCharset, callback);        handler.setExpiry(currentRequestExpiry);        handler.setHttpRedirectHandler(httpRedirectHandler);        if (params != null) {            request.setRequestParams(params, handler);            handler.setPriority(params.getPriority());        }        handler.executeOnExecutor(EXECUTOR, request, target, autoResume, autoRename);        return handler;    }    ////////////////////////////////////////////////////////////////////////////////////////////////    private <T> HttpHandler<T> sendRequest(HttpRequest request, RequestParams params, RequestCallBack<T> callBack) {        HttpHandler<T> handler = new HttpHandler<T>(httpClient, httpContext, responseTextCharset, callBack);        handler.setExpiry(currentRequestExpiry);        handler.setHttpRedirectHandler(httpRedirectHandler);        request.setRequestParams(params, handler);        if (params != null) {            handler.setPriority(params.getPriority());        }        handler.executeOnExecutor(EXECUTOR, request);        return handler;    }    private ResponseStream sendSyncRequest(HttpRequest request, RequestParams params) throws HttpException {        SyncHttpHandler handler = new SyncHttpHandler(httpClient, httpContext, responseTextCharset);        handler.setExpiry(currentRequestExpiry);        handler.setHttpRedirectHandler(httpRedirectHandler);        request.setRequestParams(params);        return handler.sendRequest(request);    }}


2.PreferencesCookieStore

package com.lidroid.xutils.util;import android.content.Context;import android.content.SharedPreferences;import android.text.TextUtils;import org.apache.http.client.CookieStore;import org.apache.http.cookie.Cookie;import org.apache.http.impl.cookie.BasicClientCookie;import java.io.*;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.ConcurrentHashMap;/** * A CookieStore impl, it's save cookie to SharedPreferences. * * @author michael yang */public class PreferencesCookieStore implements CookieStore {    private static final String COOKIE_PREFS = "CookiePrefsFile";    private static final String COOKIE_NAME_STORE = "names";    private static final String COOKIE_NAME_PREFIX = "cookie_";    private final ConcurrentHashMap<String, Cookie> cookies;    private final SharedPreferences cookiePrefs;    /**     * Construct a persistent cookie store.     */    public PreferencesCookieStore(Context context) {        cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, Context.MODE_PRIVATE);        cookies = new ConcurrentHashMap<String, Cookie>();        // Load any previously stored cookies into the store        String storedCookieNames = cookiePrefs.getString(COOKIE_NAME_STORE, null);        if (storedCookieNames != null) {            String[] cookieNames = TextUtils.split(storedCookieNames, ",");            for (String name : cookieNames) {                String encodedCookie = cookiePrefs.getString(COOKIE_NAME_PREFIX + name, null);                if (encodedCookie != null) {                    Cookie decodedCookie = decodeCookie(encodedCookie);                    if (decodedCookie != null) {                        cookies.put(name, decodedCookie);                    }                }            }            // Clear out expired cookies            clearExpired(new Date());        }    }    @Override    public void addCookie(Cookie cookie) {        String name = cookie.getName();        // Save cookie into local store, or remove if expired        if (!cookie.isExpired(new Date())) {            cookies.put(name, cookie);        } else {            cookies.remove(name);        }        // Save cookie into persistent store        SharedPreferences.Editor editor = cookiePrefs.edit();        editor.putString(COOKIE_NAME_STORE, TextUtils.join(",", cookies.keySet()));        editor.putString(COOKIE_NAME_PREFIX + name, encodeCookie(new SerializableCookie(cookie)));        editor.commit();    }    @Override    public void clear() {        // Clear cookies from persistent store        SharedPreferences.Editor editor = cookiePrefs.edit();        for (String name : cookies.keySet()) {            editor.remove(COOKIE_NAME_PREFIX + name);        }        editor.remove(COOKIE_NAME_STORE);        editor.commit();        // Clear cookies from local store        cookies.clear();    }    @Override    public boolean clearExpired(Date date) {        boolean clearedAny = false;        SharedPreferences.Editor editor = cookiePrefs.edit();        for (ConcurrentHashMap.Entry<String, Cookie> entry : cookies.entrySet()) {            String name = entry.getKey();            Cookie cookie = entry.getValue();            if (cookie.getExpiryDate() == null || cookie.isExpired(date)) {                // Remove the cookie by name                cookies.remove(name);                // Clear cookies from persistent store                editor.remove(COOKIE_NAME_PREFIX + name);                // We've cleared at least one                clearedAny = true;            }        }        // Update names in persistent store        if (clearedAny) {            editor.putString(COOKIE_NAME_STORE, TextUtils.join(",", cookies.keySet()));        }        editor.commit();        return clearedAny;    }    @Override    public List<Cookie> getCookies() {        return new ArrayList<Cookie>(cookies.values());    }    public Cookie getCookie(String name) {        return cookies.get(name);    }    protected String encodeCookie(SerializableCookie cookie) {        ByteArrayOutputStream os = new ByteArrayOutputStream();        try {            ObjectOutputStream outputStream = new ObjectOutputStream(os);            outputStream.writeObject(cookie);        } catch (Throwable e) {            return null;        }        return byteArrayToHexString(os.toByteArray());    }    protected Cookie decodeCookie(String cookieStr) {        byte[] bytes = hexStringToByteArray(cookieStr);        ByteArrayInputStream is = new ByteArrayInputStream(bytes);        Cookie cookie = null;        try {            ObjectInputStream ois = new ObjectInputStream(is);            cookie = ((SerializableCookie) ois.readObject()).getCookie();        } catch (Throwable e) {            LogUtils.e(e.getMessage(), e);        }        return cookie;    }    // Using some super basic byte array <-> hex conversions so we don't have    // to rely on any large Base64 libraries. Can be overridden if you like!    protected String byteArrayToHexString(byte[] b) {        StringBuffer sb = new StringBuffer(b.length * 2);        for (byte element : b) {            int v = element & 0xff;            if (v < 16) {                sb.append('0');            }            sb.append(Integer.toHexString(v));        }        return sb.toString().toUpperCase();    }    protected byte[] hexStringToByteArray(String s) {        int len = s.length();        byte[] data = new byte[len / 2];        for (int i = 0; i < len; i += 2) {            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));        }        return data;    }    public class SerializableCookie implements Serializable {        private static final long serialVersionUID = 6374381828722046732L;        private transient final Cookie cookie;        private transient BasicClientCookie clientCookie;        public SerializableCookie(Cookie cookie) {            this.cookie = cookie;        }        public Cookie getCookie() {            Cookie bestCookie = cookie;            if (clientCookie != null) {                bestCookie = clientCookie;            }            return bestCookie;        }        private void writeObject(ObjectOutputStream out) throws IOException {            out.writeObject(cookie.getName());            out.writeObject(cookie.getValue());            out.writeObject(cookie.getComment());            out.writeObject(cookie.getDomain());            out.writeObject(cookie.getExpiryDate());            out.writeObject(cookie.getPath());            out.writeInt(cookie.getVersion());            out.writeBoolean(cookie.isSecure());        }        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {            String name = (String) in.readObject();            String value = (String) in.readObject();            clientCookie = new BasicClientCookie(name, value);            clientCookie.setComment((String) in.readObject());            clientCookie.setDomain((String) in.readObject());            clientCookie.setExpiryDate((Date) in.readObject());            clientCookie.setPath((String) in.readObject());            clientCookie.setVersion(in.readInt());            clientCookie.setSecure(in.readBoolean());        }    }}

3.RequestParams

package com.lidroid.xutils.http;import android.text.TextUtils;import com.lidroid.xutils.http.client.entity.BodyParamsEntity;import com.lidroid.xutils.http.client.multipart.HttpMultipartMode;import com.lidroid.xutils.http.client.multipart.MultipartEntity;import com.lidroid.xutils.http.client.multipart.content.ContentBody;import com.lidroid.xutils.http.client.multipart.content.FileBody;import com.lidroid.xutils.http.client.multipart.content.InputStreamBody;import com.lidroid.xutils.http.client.multipart.content.StringBody;import com.lidroid.xutils.util.LogUtils;import com.lidroid.xutils.task.Priority;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.message.BasicHeader;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HTTP;import java.io.File;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.concurrent.ConcurrentHashMap;public class RequestParams {    private String charset = HTTP.UTF_8;    private List<HeaderItem> headers;    private List<NameValuePair> queryStringParams;    private HttpEntity bodyEntity;    private List<NameValuePair> bodyParams;    private HashMap<String, ContentBody> fileParams;    private Priority priority;    public RequestParams() {    }    public RequestParams(String charset) {        if (!TextUtils.isEmpty(charset)) {            this.charset = charset;        }    }    public Priority getPriority() {        return priority;    }    public void setPriority(Priority priority) {        this.priority = priority;    }    public String getCharset() {        return charset;    }    public void setContentType(String contentType) {        this.setHeader("Content-Type", contentType);    }    /**     * Adds a header to this message. The header will be appended to the end of the list.     *     * @param header     */    public void addHeader(Header header) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        this.headers.add(new HeaderItem(header));    }    /**     * Adds a header to this message. The header will be appended to the end of the list.     *     * @param name     * @param value     */    public void addHeader(String name, String value) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        this.headers.add(new HeaderItem(name, value));    }    /**     * Adds all the headers to this message.     *     * @param headers     */    public void addHeaders(List<Header> headers) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        for (Header header : headers) {            this.headers.add(new HeaderItem(header));        }    }    /**     * Overwrites the first header with the same name.     * The new header will be appended to the end of the list, if no header with the given name can be found.     *     * @param header     */    public void setHeader(Header header) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        this.headers.add(new HeaderItem(header, true));    }    /**     * Overwrites the first header with the same name.     * The new header will be appended to the end of the list, if no header with the given name can be found.     *     * @param name     * @param value     */    public void setHeader(String name, String value) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        this.headers.add(new HeaderItem(name, value, true));    }    /**     * Overwrites all the headers in the message.     *     * @param headers     */    public void setHeaders(List<Header> headers) {        if (this.headers == null) {            this.headers = new ArrayList<HeaderItem>();        }        for (Header header : headers) {            this.headers.add(new HeaderItem(header, true));        }    }    public void addQueryStringParameter(String name, String value) {        if (queryStringParams == null) {            queryStringParams = new ArrayList<NameValuePair>();        }        queryStringParams.add(new BasicNameValuePair(name, value));    }    public void addQueryStringParameter(NameValuePair nameValuePair) {        if (queryStringParams == null) {            queryStringParams = new ArrayList<NameValuePair>();        }        queryStringParams.add(nameValuePair);    }    public void addQueryStringParameter(List<NameValuePair> nameValuePairs) {        if (queryStringParams == null) {            queryStringParams = new ArrayList<NameValuePair>();        }        if (nameValuePairs != null && nameValuePairs.size() > 0) {            for (NameValuePair pair : nameValuePairs) {                queryStringParams.add(pair);            }        }    }    public void addBodyParameter(String name, String value) {        if (bodyParams == null) {            bodyParams = new ArrayList<NameValuePair>();        }        bodyParams.add(new BasicNameValuePair(name, value));    }    public void addBodyParameter(NameValuePair nameValuePair) {        if (bodyParams == null) {            bodyParams = new ArrayList<NameValuePair>();        }        bodyParams.add(nameValuePair);    }    public void addBodyParameter(List<NameValuePair> nameValuePairs) {        if (bodyParams == null) {            bodyParams = new ArrayList<NameValuePair>();        }        if (nameValuePairs != null && nameValuePairs.size() > 0) {            for (NameValuePair pair : nameValuePairs) {                bodyParams.add(pair);            }        }    }    public void addBodyParameter(String key, File file) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new FileBody(file));    }    public void addBodyParameter(String key, File file, String mimeType) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new FileBody(file, mimeType));    }    public void addBodyParameter(String key, File file, String mimeType, String charset) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new FileBody(file, mimeType, charset));    }    public void addBodyParameter(String key, File file, String fileName, String mimeType, String charset) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new FileBody(file, fileName, mimeType, charset));    }    public void addBodyParameter(String key, InputStream stream, long length) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new InputStreamBody(stream, length));    }    public void addBodyParameter(String key, InputStream stream, long length, String fileName) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new InputStreamBody(stream, length, fileName));    }    public void addBodyParameter(String key, InputStream stream, long length, String fileName, String mimeType) {        if (fileParams == null) {            fileParams = new HashMap<String, ContentBody>();        }        fileParams.put(key, new InputStreamBody(stream, length, fileName, mimeType));    }    public void setBodyEntity(HttpEntity bodyEntity) {        this.bodyEntity = bodyEntity;        if (bodyParams != null) {            bodyParams.clear();            bodyParams = null;        }        if (fileParams != null) {            fileParams.clear();            fileParams = null;        }    }    /**     * Returns an HttpEntity containing all request parameters     */    public HttpEntity getEntity() {        if (bodyEntity != null) {            return bodyEntity;        }        HttpEntity result = null;        if (fileParams != null && !fileParams.isEmpty()) {            MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT, null, Charset.forName(charset));            if (bodyParams != null && !bodyParams.isEmpty()) {                for (NameValuePair param : bodyParams) {                    try {                        multipartEntity.addPart(param.getName(), new StringBody(param.getValue()));                    } catch (UnsupportedEncodingException e) {                        LogUtils.e(e.getMessage(), e);                    }                }            }            for (ConcurrentHashMap.Entry<String, ContentBody> entry : fileParams.entrySet()) {                multipartEntity.addPart(entry.getKey(), entry.getValue());            }            result = multipartEntity;        } else if (bodyParams != null && !bodyParams.isEmpty()) {            result = new BodyParamsEntity(bodyParams, charset);        }        return result;    }    public List<NameValuePair> getQueryStringParams() {        return queryStringParams;    }    public List<HeaderItem> getHeaders() {        return headers;    }    public class HeaderItem {        public final boolean overwrite;        public final Header header;        public HeaderItem(Header header) {            this.overwrite = false;            this.header = header;        }        public HeaderItem(Header header, boolean overwrite) {            this.overwrite = overwrite;            this.header = header;        }        public HeaderItem(String name, String value) {            this.overwrite = false;            this.header = new BasicHeader(name, value);        }        public HeaderItem(String name, String value, boolean overwrite) {            this.overwrite = overwrite;            this.header = new BasicHeader(name, value);        }    }


0 0