大家好:针对retrofit+rxjava的整合。博主本人进行在设计过程中进行的是一个基础的架构的封装。跟大家分享下并继续改善。
首先。大家都知道Retrofit是一个代理okhttp的网络代理 ,首先针对retrofit简单用法。
public class RetrofitApi {
private RetrofitService retrofitService;
private static RetrofitApi retrofitApi;
public static RetrofitApi getInstence() {
if (retrofitApi == null) {
synchronized (RetrofitApi.class) {
if (retrofitApi == null) {
retrofitApi = new RetrofitApi();
}
}
}
return retrofitApi;
}
/**
* 封装getRetrofitService 进行http请求代理
*/
public RetrofitService getRetrofitService(Context context) {
OkHttpClient client = new OkHttpClient.Builder()
//添加应用拦截器
.addInterceptor(new HttpInterceptor(context))
.build();
if (retrofitService == null) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
retrofitService = retrofit.create(RetrofitService.class);
}
return retrofitService;
}
}
以上是最基本的一个请求封装,那么我们如何用呢?下面且看:
private void getUser() {
hallPresent.getUserInfo(new HomeView.userinfo() {
@Override
public void getinfo(String p) {
UserBackBean.DataBean dataBean = new Gson().fromJson(p, UserBackBean.DataBean.class);
tv_user_nick.setText(dataBean.getNickName());
Glide.with(getActivity()).load(dataBean.getAvatar()).placeholder(R.drawable.headimage).into(iv_my_head);
tv_balance.setText(Double.valueOf(dataBean.getBalanceAmt()).intValue() + "");
}
});
}
那么getUserInfo中代码是如何进行请求呢.别急,你看:
public void getUserInfo(HomeView.userinfo infoview) {
handleRequest(RetrofitApi.getInstence().getRetrofitService(activity).getUserInfo(), new MyObserver(activity) {
@Override
public void getData(String json) {
infoview.getinfo(json);
}
});
}
.是的,这样就完成了请求了。那么这个handleRequest是啥呢,点进去看一下就明白啦!
public static <T> void handleRequest(Observable<T> observable, Observer<T> observer) {
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
哈哈,没错就是针对Rxjava进行了线程的切换以及Observable对象,那么啥是Observable对象呢 。
@POST("/v1/user/register")
Observable<RegisterBean> toRegister(@QueryMap Map<String, String> map);
咋一看.是不是就明白了呢 。