【发布时间】:2020-12-02 17:36:56
【问题描述】:
你好,
getInfo() 服务调用同时被多个片段订阅,所以我只想调用一次服务,存储该信息并返回它。
我使用blockingGet()找到了解决方案
addDisposable(getInfoUseCase().get()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(info -> {}
, throwable -> {}));
最终转化为:
private var info: InfoEntity? = null
override fun getInfo(): Single<InfoEntity> {
return if (info== null) {
Single.just(service.getInfo(SERVICE_GET_INFO).blockingGet())
.map { mapper.transform(it) }
.doOnSuccess {
info = it
}
} else {
return Single.just(info)
}
}
这里是服务对象:
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(createClient(TIMEOUT, true))
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.build();
service = restAdapter.create(RetrofitService.class);
@GET(".")
Single<ApiResponse<InfoEntity>> getInfo(
@Query(SERVICE_ID) String serviceId
);
乍一看,一切正常,但后来我找到了这个答案:
never use observeOn(AndroidSchedulers.mainThread()) with blockingGet()
但就我而言,一切正常,我不明白有什么区别,我的方法有什么问题吗?如果有,有什么出路?
【问题讨论】: