希望对你有帮助!!!package com.loopj.android.http;import android.content.Context;
import android.util.Log;
import com.loopj.android.http.klib.Params;
import com.zhaopin.social.utils.ApiUrl;
import com.zhaopin.social.utils.NetParams;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.zip.GZIPInputStream;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.HttpVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CookieStore;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ClientConnectionManager;
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.entity.HttpEntityWrapper;
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.HttpContext;
import org.apache.http.protocol.SyncBasicHttpContext;public class AsyncHttpClient
{
  private static final int DEFAULT_MAX_CONNECTIONS = 5;
  private static final int DEFAULT_MAX_RETRIES = 5;
  private static final int DEFAULT_SOCKET_BUFFER_SIZE = 8192;
  private static final int DEFAULT_SOCKET_TIMEOUT = 30000;
  private static final String ENCODING_GZIP = "gzip";
  private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
  private static Context activity;
  private static int maxConnections = 5;
  private static int socketTimeout = 30000;
  private final Map<String, String> clientHeaderMap;
  private final DefaultHttpClient httpClient;
  private final HttpContext httpContext;
  private final Map<Context, List<WeakReference<Future<?>>>> requestMap;
  private ThreadPoolExecutor threadPool;  public AsyncHttpClient(Context paramContext)
  {
    activity = paramContext;
    BasicHttpParams localBasicHttpParams = new BasicHttpParams();
    ConnManagerParams.setTimeout(localBasicHttpParams, socketTimeout);
    ConnManagerParams.setMaxConnectionsPerRoute(localBasicHttpParams, new ConnPerRouteBean(maxConnections));
    ConnManagerParams.setMaxTotalConnections(localBasicHttpParams, 5);
    HttpConnectionParams.setSoTimeout(localBasicHttpParams, socketTimeout);
    HttpConnectionParams.setConnectionTimeout(localBasicHttpParams, socketTimeout);
    HttpConnectionParams.setTcpNoDelay(localBasicHttpParams, true);
    HttpConnectionParams.setSocketBufferSize(localBasicHttpParams, 8192);
    HttpProtocolParams.setVersion(localBasicHttpParams, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setUserAgent(localBasicHttpParams, "kooxiv");
    SchemeRegistry localSchemeRegistry = new SchemeRegistry();
    localSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    localSchemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    ThreadSafeClientConnManager localThreadSafeClientConnManager = new ThreadSafeClientConnManager(localBasicHttpParams, localSchemeRegistry);
    this.httpContext = new SyncBasicHttpContext(new BasicHttpContext());
    this.httpClient = new DefaultHttpClient(localThreadSafeClientConnManager, localBasicHttpParams);
    this.httpClient.addRequestInterceptor(new HttpRequestInterceptor()
    {
      public void process(HttpRequest paramAnonymousHttpRequest, HttpContext paramAnonymousHttpContext)
      {
        if (!paramAnonymousHttpRequest.containsHeader("Accept-Encoding"))
          paramAnonymousHttpRequest.addHeader("Accept-Encoding", "gzip");
        Iterator localIterator = AsyncHttpClient.this.clientHeaderMap.keySet().iterator();
        while (true)
        {
          if (!localIterator.hasNext())
            return;
          String str = (String)localIterator.next();
          paramAnonymousHttpRequest.addHeader(str, (String)AsyncHttpClient.this.clientHeaderMap.get(str));
        }
      }
    });
    this.httpClient.addResponseInterceptor(new HttpResponseInterceptor()
    {
      public void process(HttpResponse paramAnonymousHttpResponse, HttpContext paramAnonymousHttpContext)
      {
        HttpEntity localHttpEntity = paramAnonymousHttpResponse.getEntity();
        if (localHttpEntity == null);
        label93: 
        while (true)
        {
          return;
          Header localHeader = localHttpEntity.getContentEncoding();
          if (localHeader != null)
          {
            HeaderElement[] arrayOfHeaderElement = localHeader.getElements();
            int i = arrayOfHeaderElement.length;
            for (int j = 0; ; j++)
            {
              if (j >= i)
                break label93;
              if (arrayOfHeaderElement[j].getName().equalsIgnoreCase("gzip"))
              {
       

解决方案 »

  1.   

             paramAnonymousHttpResponse.setEntity(new AsyncHttpClient.InflatingEntity(paramAnonymousHttpResponse.getEntity()));
                    break;
                  }
                }
              }
            }
          }
        });
        this.httpClient.setHttpRequestRetryHandler(new RetryHandler(5));
        this.threadPool = ((ThreadPoolExecutor)Executors.newCachedThreadPool());
        this.requestMap = new WeakHashMap();
        this.clientHeaderMap = new HashMap();
      }  private HttpEntityEnclosingRequestBase addEntityToRequestBase(HttpEntityEnclosingRequestBase paramHttpEntityEnclosingRequestBase, HttpEntity paramHttpEntity)
      {
        if (paramHttpEntity != null)
          paramHttpEntityEnclosingRequestBase.setEntity(paramHttpEntity);
        return paramHttpEntityEnclosingRequestBase;
      }  private HttpEntity paramsToEntity(Params paramParams)
      {
        HttpEntity localHttpEntity = null;
        if (paramParams != null)
          localHttpEntity = paramParams.getEntity();
        return localHttpEntity;
      }  public void addHeader(String paramString1, String paramString2)
      {
        this.clientHeaderMap.put(paramString1, paramString2);
      }  public void cancelRequests(Context paramContext, boolean paramBoolean)
      {
        List localList = (List)this.requestMap.get(paramContext);
        Iterator localIterator;
        if (localList != null)
          localIterator = localList.iterator();
        while (true)
        {
          if (!localIterator.hasNext())
          {
            this.requestMap.remove(paramContext);
            return;
          }
          Future localFuture = (Future)((WeakReference)localIterator.next()).get();
          if (localFuture != null)
            localFuture.cancel(paramBoolean);
        }
      }  public void delete(Context paramContext, String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpDelete localHttpDelete = new HttpDelete(paramString);
        sendRequest(this.httpClient, this.httpContext, localHttpDelete, null, paramAsyncHttpResponseHandler, paramContext);
      }  public void delete(Context paramContext, String paramString, Header[] paramArrayOfHeader, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpDelete localHttpDelete = new HttpDelete(paramString);
        if (paramArrayOfHeader != null)
          localHttpDelete.setHeaders(paramArrayOfHeader);
        sendRequest(this.httpClient, this.httpContext, localHttpDelete, null, paramAsyncHttpResponseHandler, paramContext);
      }  public void delete(String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        delete(null, paramString, paramAsyncHttpResponseHandler);
      }  public void get(Context paramContext, String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        get(paramContext, paramString, null, paramAsyncHttpResponseHandler);
      }  public void get(Context paramContext, String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        sendRequest(this.httpClient, this.httpContext, new HttpGet(getUrlWithQueryString(paramString, paramParams)), null, paramAsyncHttpResponseHandler, paramContext);
      }  public void get(Context paramContext, String paramString, Header[] paramArrayOfHeader, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpGet localHttpGet = new HttpGet(getUrlWithQueryString(paramString, paramParams));
        if (paramArrayOfHeader != null)
          localHttpGet.setHeaders(paramArrayOfHeader);
        sendRequest(this.httpClient, this.httpContext, localHttpGet, null, paramAsyncHttpResponseHandler, paramContext);
      }  public void get(String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        get(null, paramString, null, paramAsyncHttpResponseHandler);
      }  public void get(String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        get(null, paramString, paramParams, paramAsyncHttpResponseHandler);
      }  public HttpClient getHttpClient()
      {
        return this.httpClient;
      }  public HttpContext getHttpContext()
      {
        return this.httpContext;
      }  public String getUrlWithQueryString(String paramString, Params paramParams)
      {
        String str1;
        if (paramParams != null)
        {
          String str3 = paramParams.getParamString();
          str1 = new StringBuilder(String.valueOf(paramString)).append("?").append(str3).toString() + "&" + NetParams.getNetParams(activity);
        }
        try
        {
          while (true)
          {
            str1 = str1.replaceAll("\\+", "%20");
            String str2 = str1.replace(ApiUrl.HOST, "").toLowerCase();
            str1 = str1 + "&e=" + NetParams.getMD5(new StringBuilder(String.valueOf(str2)).append(NetParams.getSN()).toString());
            Log.i("aftermd5", str1);
            return str1;
            str1 = paramString + "?" + NetParams.getNetParams(activity);
          }
        }
        catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
        {
          while (true)
            localNoSuchAlgorithmException.printStackTrace();
        }
      }  public void post(Context paramContext, String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        post(paramContext, paramString, paramsToEntity(paramParams), null, paramAsyncHttpResponseHandler);
      }  public void post(Context paramContext, String paramString1, HttpEntity paramHttpEntity, String paramString2, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        sendRequest(this.httpClient, this.httpContext, addEntityToRequestBase(new HttpPost(paramString1), paramHttpEntity), paramString2, paramAsyncHttpResponseHandler, paramContext);
      }  public void post(Context paramContext, String paramString1, Header[] paramArrayOfHeader, Params paramParams, String paramString2, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpPost localHttpPost = new HttpPost(paramString1);
        if (paramParams != null)
          localHttpPost.setEntity(paramsToEntity(paramParams));
        if (paramArrayOfHeader != null)
          localHttpPost.setHeaders(paramArrayOfHeader);
        sendRequest(this.httpClient, this.httpContext, localHttpPost, paramString2, paramAsyncHttpResponseHandler, paramContext);
      }  public void post(Context paramContext, String paramString1, Header[] paramArrayOfHeader, HttpEntity paramHttpEntity, String paramString2, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpEntityEnclosingRequestBase localHttpEntityEnclosingRequestBase = addEntityToRequestBase(new HttpPost(paramString1), paramHttpEntity);
        if (paramArrayOfHeader != null)
          localHttpEntityEnclosingRequestBase.setHeaders(paramArrayOfHeader);
        sendRequest(this.httpClient, this.httpContext, localHttpEntityEnclosingRequestBase, paramString2, paramAsyncHttpResponseHandler, paramContext);
      }  public void post(String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        post(null, paramString, null, paramAsyncHttpResponseHandler);
      }  public void post(String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        post(null, paramString, paramParams, paramAsyncHttpResponseHandler);
      }  public void put(Context paramContext, String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        put(paramContext, paramString, paramsToEntity(paramParams), null, paramAsyncHttpResponseHandler);
      }  public void put(Context paramContext, String paramString1, HttpEntity paramHttpEntity, String paramString2, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        sendRequest(this.httpClient, this.httpContext, addEntityToRequestBase(new HttpPut(paramString1), paramHttpEntity), paramString2, paramAsyncHttpResponseHandler, paramContext);
      }  public void put(Context paramContext, String paramString1, Header[] paramArrayOfHeader, HttpEntity paramHttpEntity, String paramString2, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        HttpEntityEnclosingRequestBase localHttpEntityEnclosingRequestBase = addEntityToRequestBase(new HttpPut(paramString1), paramHttpEntity);
        if (paramArrayOfHeader != null)
          localHttpEntityEnclosingRequestBase.setHeaders(paramArrayOfHeader);
        sendRequest(this.httpClient, this.httpContext, localHttpEntityEnclosingRequestBase, paramString2, paramAsyncHttpResponseHandler, paramContext);
      }  public void put(String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        put(null, paramString, null, paramAsyncHttpResponseHandler);
      }  public void put(String paramString, Params paramParams, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
      {
        put(null, paramString, paramParams, paramAsyncHttpResponseHandler);
      }  protected void sendRequest(DefaultHttpClient paramDefaultHttpClient, HttpContext paramHttpContext, HttpUriRequest paramHttpUriRequest, String paramString, AsyncHttpResponseHandler paramAsyncHttpResponseHandler, Context paramContext)
      {
        if (paramString != null)
          paramHttpUriRequest.addHeader("Content-Type", paramString);
        Future localFuture = this.threadPool.submit(new AsyncHttpRequest(paramDefaultHttpClient, paramHttpContext, paramHttpUriRequest, paramAsyncHttpResponseHandler));
        if (paramContext != null)
        {
          Object localObject = (List)this.requestMap.get(paramContext);
          if (localObject == null)
          {
            localObject = new LinkedList();
            this.requestMap.put(paramContext, localObject);
          }
          ((List)localObject).add(new WeakReference(localFuture));
        }
      }
      

  2.   

    如下:
     public void process(HttpRequest paramAnonymousHttpRequest, HttpContext paramAnonymousHttpContext)
          {
            if (!paramAnonymousHttpRequest.containsHeader("Accept-Encoding"))
              paramAnonymousHttpRequest.addHeader("Accept-Encoding", "gzip");
            Iterator localIterator = AsyncHttpClient.this.clientHeaderMap.keySet().iterator();
            while (true)
            {
              if (!localIterator.hasNext())
                return;
              String str = (String)localIterator.next();
              paramAnonymousHttpRequest.addHeader(str, (String)AsyncHttpClient.this.clientHeaderMap.get(str));
            }
          }
        });
      

  3.   

    这个框架很蛋疼啊,想设置一个请求头,用client.addHeader("XXXX", "XXXX");服务端报400回来,蛋疼。最后还是用得原生的HTTPClient来弄的~~
      

  4.   

       AsyncHttpClient client = getAsyncHttpClient();
            client.setTimeout(ApplicationConstant.httpTimeOut);
            PersistentCookieStore myCookieStore = new PersistentCookieStore(FuniCloudApplication.context);
            client.setCookieStore(myCookieStore);