Retrofit+RxJava之封装详情

public class RetrofitConf {
private static final String BASEURL = “http:// xxxxx”;
private static String token;
private Retrofit retrofit;
private LpyService service;
private Boolean isDebug = true;

//创建网络请求

public RetrofitConf() {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();

if (isDebug) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.addInterceptor(loggingInterceptor);
}

clientBuilder.addInterceptor(chain -> {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
builder.addHeader(“client”, “android”);
if (token != null ) {
builder.addHeader(“token”, token);
}
return chain.proceed(builder.build());
});
//创建网络请求
retrofit = new Retrofit.Builder()
.baseUrl(BASEURL) //对应服务器host
.addConverterFactory(GsonConverterFactory.create()) //Gson解析
// 把Retrofit请求转化成RxJava的Observable.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(clientBuilder.build())
.build();

service = retrofit.create(LpyService.class);
}

public static void setToken(String token) {
RetrofitConf.token = token;
}

//引用接口类
LpyService getService() {
return service;
}
}

// 创建网络请求的ObservablecompositeDisposable.add(Retrofits.lpyService().auctionAddBuyer(itemAuctionId.value, buyerName, buyerPhone, buyerIdCard).map(new HttpResultNullFunc<>())// 在UI线程中暗中观察并及时消费.observeOn(AndroidSchedulers.mainThread())// 然后在需要的地方订阅刚才创建的可观察对象,返回一个Disposable对象,后面我们会用到.subscribe(objectOptional -> {Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();this.finish();},displayErrorAction(this)));
需要注意的是,只有在调用Observable的subscribe方法时,网络请求才会触发,订阅即触发。

如果在请求过程中,UI层destroy了怎么办,不及时取消订阅,可能会造成内存泄漏。因此,CompositeDisposable就上场了,它可以对我们订阅的请求进行统一管理。
大致三步走:
1、在UI层创建的时候(比如onCreate之类的),实例化CompositeDisposable;
2、把subscribe订阅返回的Disposable对象加入管理器;
3、UI销毁时清空订阅的对象
在这里插入图片描述这样我们就可以管理脱缰的网络请求了,相当于将它与UI的生命周期绑定。只要稍稍将上述模板封装一哈,就比较方便了。比如add操作可以封装一个方法,每次网络请求时add一发就好。
对于MVP架构的项目,CompositeDisposable完全可以封装到Presenter当中。这里就不展开了。

变换操作符
1.Map()
map操作符把被观察者Observable产生的结果通过映射规则转换成另一种结果集,并交给订阅者处理。简单来说就是对被观察者发送的每个事件都通过指定函数的处理,从而转变成另一种事件。
在这里插入图片描述上面的例子中我们使用just()操作符连续发送1,2,3,4,5等5个事件,通过Map操作符中的Function函数对被观察者发送的事件统一作出乘以10处理,订阅后输出最终结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值