最近项目需要封装统一的网络请求,因为后台数据的返回不确定性,决定进行最基础的封装,统一返回String,gson解析自行处理。采用Android-Async-Http框架。
碰到的问题有:1、body要求为json而非表单形式,还有json+参数的请求体。2、Android-Async-Http框架未知原因闪退。
代码如下:
public class AsyHttpManger { private static AsyncHttpClient client = new AsyncHttpClient(); /** * 捕捉所有异常,防止闪退 */ public static void get(String apiId, RequestParams params, AsyncHttpResponseHandler responseHandler) { LogMgr.error("============URL============" + apiId + ":" + NetConfig.getUrl(apiId) + "?" + params.toString()); try { client.get(NetConfig.getUrl(apiId), params, responseHandler); } catch (Exception e) { LogMgr.error(e.getMessage()); } } /** * 捕捉所有异常,防止闪退 */ public static void put(String apiId, RequestParams params, AsyncHttpResponseHandler responseHandler) { LogMgr.error("============URL============" + apiId + ":" + NetConfig.getUrl(apiId)); try { client.put(NetConfig.getUrl(apiId), params, responseHandler); } catch (Exception e) { LogMgr.error(e.getMessage()); } } /** * 捕捉所有异常,防止闪退 */ public static void post(String apiId, RequestParams params, AsyncHttpResponseHandler responseHandler) { LogMgr.error("============URL============" + apiId + ":" + NetConfig.getUrl(apiId) + "?" + params.toString()); try { client.post(NetConfig.getUrl(apiId), params, responseHandler); } catch (Exception e) { LogMgr.error(e.getMessage()); } } /** * 适用于需要传参数和json对象的接口 * Post 异步请求 * @param map 参数 */ public static void postJson(Context context, String apiId, Map<String, String> map, String jsonstring, AsyncHttpResponseHandler responseHandler) { try { String url = NetConfig.getUrl(apiId) + "?"; for (String key : map.keySet()) { url = url + "&" + key + "=" + map.get(key); } LogMgr.error("============URL============" + apiId + ":" + url); LogMgr.error("jsonstring:" + jsonstring); //以ByteArrayEntity格式 ByteArrayEntity entity = new ByteArrayEntity(jsonstring.getBytes("UTF-8")); client.post(context, url, entity, "application/json", responseHandler); // client.post(context, url, stringEntity, "application/json;charset=UTF-8", responseHandler); } catch (Exception e) { LogMgr.error(e.getMessage()); } } /** * 捕捉所有异常,防止闪退 */ public static void delete(String apiId, RequestParams params, AsyncHttpResponseHandler responseHandler) { LogMgr.error("============URL============" + apiId + ":" + NetConfig.getUrl(apiId)); try { client.delete(NetConfig.getUrl(apiId), params, responseHandler); } catch (Exception e) { LogMgr.error(e.getMessage()); } } /** * 取消asyhttp的所有请求 */ public static void cancel() { client.cancelAllRequests(true); } public static void setTimeout() { client.setTimeout(60000); } }
调用代码:
RequestParams requestParams = new RequestParams(); requestParams.put("name", "abcd"); AsyHttpManger.get(NetConfig.A001, requestParams, new TextHttpResponseHandler() { @Override public void onFailure(int i, Header[] headers, String s, Throwable throwable) { LogMgr.info("A001:" + throwable.getMessage().toString()); } @Override public void onSuccess(int i, Header[] headers, String s) { LogMgr.info("A001:" + s); } });