-
Asynchronous Http Client for Android
Android异步Http请求
项目地址:https://github.com/loopj/android-async-http
文档介绍:http://loopj.com/android-async-http/
特点:(1) 在匿名回调中处理请求结果
(2) 在UI线程外进行http请求
(3) 文件断点上传
(4) 智能重试
(5) 默认gzip压缩
(6) 支持解析成Json格式
(7) 可将Cookies持久化到SharedPreferences
package com.cattsoft.deliersystem.net;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import cn.trinea.android.common.util.StringUtils;
import com.cattsoft.deliersystem.constants.Constant;
import com.cattsoft.deliersystem.util.Tools;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
/**
* http异步请求工具类,使用的是第三方的类库 <br>
* 通过回调的形式获取数据 <br>
* <br>
* 返回状态码为 "200 OK"时调用<br>
* onSuccess(int statusCode, Header[] headers, JSONObject response) <br>
* <br>
* 返回状态码为"4XX" (eg. 401, 403, 404)时调用<br>
* onFailure(int statusCode, Header[] headers, String responseString, Throwable
* throwable) <br>
* <br>
* 返回主体为空时调用此方法(网络连接不可用)<br>
* onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject
* errorResponse)
*
* @author 肖秋
*
*/
public class HttpClient implements Constant {
//官方推荐写成静态的
private static AsyncHttpClient client = new AsyncHttpClient();
static {
client.setTimeout(TIME_OUT);
}
public static void get(String token, String url, RequestParams params,
AsyncHttpResponseHandler responseHandler) {
if (!StringUtils.isBlank(token)) {
client.addHeader(TOKEN, token);
}
client.get(getAbsoluteUrl(url), params, responseHandler);
Tools.Log(getAbsoluteUrl(url));
}
public static void post(String token, String url, RequestParams params,
AsyncHttpResponseHandler responseHandler) {
if (!StringUtils.isBlank(token)) {
client.addHeader(TOKEN, token);
}
client.post(getAbsoluteUrl(url), params, responseHandler);
Tools.Log(getAbsoluteUrl(url));
}
private static String getAbsoluteUrl(String relativeUrl) {
return HOST_URL + relativeUrl;
}
public static Map<String, String> analyticResult(JSONObject response) {
Map<String, String> map = new HashMap<>();
try {
String code = response.getString("result_code");
String data = response.getString("data");
map.put(CODE, code);
map.put(DATA, data);
} catch (JSONException e) {
e.printStackTrace();
}
return map;
}
}
在代码中调用
Urls = this.getResources().getStringArray(R.array.homeRequestUrls);
String token = PreferencesUtils.getString(this, TOKEN);
HttpClient.get(token, Urls[index], null,
new JsonHttpResponseHandler(ENCODING) {
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
Tools.Log("响应正确");
analyticData(HttpClient.analyticResult(response), index);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
Tools.Log("响应错误");
showStyle(1);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONArray errorResponse) {
Tools.Log("无响应");
showStyle(1);
}
});