Android项目框架升级尝鲜OkHttp

本文介绍了Android项目从使用loop4j切换到OkHttp的升级过程,包括OkHttp的初始化、图片上传、超时问题的解决以及网络安全性。通过重构,项目请求速度提升了约30%,并讨论了OkHttp与其他框架的区别,如HttpClient和Volley。此外,文章还涉及自签名证书的生成,以及在网络请求缓存、安全性和流量节省方面的策略。
摘要由CSDN通过智能技术生成

   本文来自刘兆贤的博客_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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘兆贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值