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冲突。还是集成下环信或者融云这个更加好吧。。。。