本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!
随着项目日趋稳定,需求不再总是变化,那么是时间来整理下项目了。先简单介绍下,本项目最初使用loop4j(即async-http)框架,仅98kb大小,使用也比较方便,为什么要选用它呢?13年的时候其他框架还没那么成熟,咱们做项目稳定第一,其次性能,而它刚好满足这个条件;坏处在于请求慢,而且回调显得烦琐。
使用方法如下:
1、初始化请求客户端
private static AsyncHttpClient client;
/**
* 重试3次<br>
* * 超时20s
*/
static {
client = new MyAsyncHttpClient();
client.setTimeout(10 * 1000);//要设置超时间,默认的为10s
client.setMaxRetriesAndTimeout(3, 10 * 1000);
client.setEnableRedirects(false);
// 允许环形重定向和设置重定向最大次数。
client.getHttpClient().getParams().setParameter(ClientPNames.MAX_REDIRECTS, 3);
client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false);
}
class MyAsyncHttpClient extends AsyncHttpClient {
@Override
public void setEnableRedirects(final boolean enableRedirects) {
((DefaultHttpClient) getHttpClient()).setRedirectHandler(new DefaultRedirectHandler() {
@Override
public boolean isRedirectRequested(HttpResponse response, HttpContext context) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 301 || statusCode == 302) {
return enableRedirects;
}
return false;
}
});
}
}
2、设置返回调用
protected JsonHttpResponseHandler responseHandler = new JsonHttpResponseHandler() {
/**
* Returns when request failed
*
* @param statusCode http response status line
* @param headers response headers if any
* @param throwable throwable describing the way request failed
* @param errorResponse parsed response if any
*/
public void onFailure(int statusCode, Throwable throwable, JSONObject errorResponse) {
boolean isNetAvailable =FactoryProxy.getInstance().getNetStatusManager().isNetAvailable();
mTask.onError(DEFAULT_TASK_WHAT, isNetAvailable ? "加载失败,请重试" : "网络异常");
Message message = new Message();
message.what = MSG_CODE_LOAD_ERROR;
message.obj = DEFAULT_TASK_WHAT;
handler.sendMessage(message);
}
@Override
public void onSuccess(int statusCode, JSONObject response) {
super.onSuccess(statusCode, response);
setPtrFinished();
// 访问失败
if (statusCode != 200) {
return;
}
// 如果返回的编号小于0的话证明有错误
int error_no = response.optInt("erro_no");
if (error_no < 0) {
switch (error_no) {
case -102:// 异常处理
//要用到在当前页面处理的
mTask.onError(DEFAULT_TASK_WHAT, response.optString("error_no", "暂无数据"));
break;
default:
mTask.reset();
break;
}
Message message = handler.obtainMessage(error_no, response);
handler.sendMessage(message);//主要用于toast
} else {
// 否则没有错误解析数据
if (response.has(API_METHOD_DATA)) {
Object json = response.get(