Android okhttp3封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DTJ_74/article/details/79579097

2018-3-16 

接着昨晚的项目,在基础上封装一个okhttp3的网络框架,封装比较快,想到什么就写了。每个项目的需求不一样,先弄基本的东西。



然后接着HttpManager 网络请求的封装。

package com.sys.lostpro.mvplost.net.http;

import android.content.Context;
import android.util.Log;

import com.sys.lostpro.mvplost.model.eventbusmsg.ProgressInfo;

import org.greenrobot.eventbus.EventBus;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;


public class HttpManager {
    private volatile static HttpManager httpInstance = null;
    private Context context;
    private OkHttpClient.Builder okBuilder;

    private HttpManager() {
        okBuilder = new OkHttpClient.Builder();
        okBuilder.connectTimeout(15, TimeUnit.SECONDS);
        okBuilder.readTimeout(60, TimeUnit.SECONDS);
        okBuilder.writeTimeout(60, TimeUnit.SECONDS);
        //配置拦截器。
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Log.e("httpmanager", message);
            }
        });
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        okBuilder.addInterceptor(logging);
        okBuilder.addInterceptor(new ParemsInterceptor());
    }

    private static class ParemsInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request oldrequest = chain.request();
            HttpUrl.Builder builder = oldrequest.url()
                    .newBuilder()
                    .setEncodedQueryParameter("showapi_appid", "14494")
                    .setEncodedQueryParameter("showapi_sign", "86b42577b7b84307bdc68c1be582bfe3");
            // 新的请求
            Request newRequest = oldrequest.newBuilder()
                    .method(oldrequest.method(), oldrequest.body())
                    .url(builder.build())
                    .build();
            Response response = chain.proceed(newRequest);
            return response;
        }
    }

    public static HttpManager getInStance() {
        if (httpInstance == null) {
            synchronized (HttpManager.class) {
                if (httpInstance == null) {
                    httpInstance = new HttpManager();
                }
            }
        }
        return httpInstance;
    }


    //异步post请求
    public void async_post(String url, Map<String, String> params) {
        EventBus.getDefault().post(new ProgressInfo(1));
        FormBody.Builder formbuilder = new FormBody.Builder();
        for (String key : params.keySet()) {
            formbuilder.add(key, params.get(key));
        }
        final Request request = new Request.Builder().url(url).post(formbuilder.build()).build();
        Call mCall = okBuilder.build().newCall(request);
        mCall.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                EventBus.getDefault().post(new ProgressInfo(2));
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                EventBus.getDefault().post(new ProgressInfo(2));
            }
        });
    }

    //异步get请求
    public void async_get() {

    }

    //上传
    public void async_upload() {

    }

    //下载
    public void async_download() {

    }
}

一般都是 请求封装,然后gson 解析的,弄一个callback<T>泛型出来,这个是基本的套路。迟下再弄,反正测试了post 请求没有问题,写这个东西,主要是想试下Bmob 的第三方那个即时通讯技术。

之前搭建的RxJava2+RxAndroid 。。。那个·框架不兼容 bmob的,最新版,然后提工单,那里的大佬叫我降级处理,我就感觉有点不爽。。。然后就换个项目试下吧。



刚验证了,也是兼容不了,唉,bmob 用的rx1 版本,感觉不是很兼容。有无其他大佬板试过这个的。。。。次次集成最新版本,就显示jar冲突,但是查看又没有jar冲突。还是集成下环信或者融云这个更加好吧。。。。

扫描二维码关注公众号,回复: 3846675 查看本文章












猜你喜欢

转载自blog.csdn.net/DTJ_74/article/details/79579097