Android(安卓)okhttp3封装
16lz
2021-01-25
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, Mapparams) { 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
之前搭建的RxJava2+RxAndroid 。。。那个·框架不兼容 bmob的,最新版,然后提工单,那里的大佬叫我降级处理,我就感觉有点不爽。。。然后就换个项目试下吧。
刚验证了,也是兼容不了,唉,bmob 用的rx1 版本,感觉不是很兼容。有无其他大佬板试过这个的。。。。次次集成最新版本,就显示jar冲突,但是查看又没有jar冲突。还是集成下环信或者融云这个更加好吧。。。。
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- android JNI 入门
- Android运行异常一:token android.os.BinderProxy@438e7108 is no
- Android(安卓)项目贪吃蛇最初版本实现。
- Android上使用jspf插件框架的方法
- Android框架之路——ToolBar的使用
- Spring For Android初体验
- [android]在eclipse中项目经常出现异常解决办法