package com.sets.speedtest.manager.http;
import org.apache.http.Header;
import org.apache.http.entity.StringEntity;
import org.json.JSONObject;
import android.content.Context;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestHandle;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.ResponseHandlerInterface;
import com.sets.speedtest.common.CommLoading;
import com.sets.speedtest.utils.ViewUtils;
/**
* HTTP请求客户端
*
* @author : lipan
* @create_time : 2014年4月19日 上午11:36:18
* @desc : HTTP请求客户端
* @update_time :
* @update_desc :
*
*/
public class WSClient
{
public static final String CHARSET = "UTF-8";
public static final int TIMEOUT = 25000;
public static final String CONTENT_TYPE_JSON = "application/json;charset=utf-8";
private static AsyncHttpClient client;
public static void reset(Context context)
{
// 如果已经创建了客户端,则取消所有进行中的客户端
if (client != null)
client.cancelRequests(context, true);
client = new AsyncHttpClient();
client.setTimeout(TIMEOUT);
client.setCookieStore(new PersistentCookieStore(context));
}
public static void clear(Context context)
{
PersistentCookieStore cookieStore = new PersistentCookieStore(context);
cookieStore.clear();
}
public static void cancel(Context context)
{
if (client != null)
client.cancelRequests(context, true);
}
/**
* 发送http请求,返回json数据
*
* @param context
* @param url
* @param timeout
* @param data
* @param responseHandler
* @return
*/
public static RequestHandle postForm(Context context, final String url, RequestParams data,
final BaseResponseHandler responseHandler)
{
try
{
// 检查网络连接
if (!ViewUtils.checkNetworkWithToast(context))
{
return null;
}
if (data == null)
{
data = new RequestParams();
}
// 时间戳
data.put("timestamp", System.currentTimeMillis());
JsonHttpResponseHandler jsonHttpResponseHandler = new JsonHttpResponseHandler()
{
@Override
public void onStart()
{
responseHandler.onPrepare();
responseHandler.onStart();
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response)
{
responseHandler.onSuccess(statusCode, response);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable,
JSONObject errorResponse)
{
responseHandler.onFailure(throwable, "");
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString,
Throwable throwable)
{
responseHandler.onFailure(throwable, "");
}
@Override
public void onFinish()
{
CommLoading.dismiss(); // 隐藏Loading
responseHandler.onFinish();
}
};
return client.post(context, url, data, jsonHttpResponseHandler);
} catch (Exception e)
{
responseHandler.onFailure(e, "");
}
return null;
}
public static RequestHandle postJson(Context context, final String url, StringEntity data,
final BaseResponseHandler responseHandler)
{
try
{
// 检查网络连接
if (!ViewUtils.checkNetworkWithToast(context))
{
return null;
}
// 时间戳
JsonHttpResponseHandler jsonHttpResponseHandler = new JsonHttpResponseHandler()
{
@Override
public void onStart()
{
responseHandler.onPrepare();
responseHandler.onStart();
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response)
{
responseHandler.onSuccess(statusCode, response);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable,
JSONObject errorResponse)
{
responseHandler.onFailure(throwable, "");
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString,
Throwable throwable)
{
responseHandler.onFailure(throwable, "");
}
@Override
public void onFinish()
{
CommLoading.dismiss(); // 隐藏Loading
responseHandler.onFinish();
}
};
return client.post(context, url, data, CONTENT_TYPE_JSON, jsonHttpResponseHandler);
} catch (Exception e)
{
responseHandler.onFailure(e, "");
}
return null;
}
/**
* get请求
*
* @param url
* @param handlerInterface
* @return
*/
public static RequestHandle get(String url, ResponseHandlerInterface handlerInterface)
{
return client.get(url, handlerInterface);
}
}