安卓网络请求封装--Android-Async-Http

来源:互联网 发布:茅台葡萄酒 知乎 编辑:程序博客网 时间:2024/06/07 22:08

最近项目需要封装统一的网络请求,因为后台数据的返回不确定性,决定进行最基础的封装,统一返回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);    }});



原创粉丝点击