我有这个简单的retrofit2 api接口,其中包含
interface Api {
@GET(BuildConfig.END_POINT) Observable<Response> fetchData();
}
所以当我提出新的要求时,一切都很好 但是,让我说我发出一个请求,然后我立即取消订阅,然后我尝试触发新请求,它什么都不返回。
所以,在代码中它看起来像这样:
在Activity :: onPause中我执行取消订阅,在Activity :: onResume中我再次触发请求。
我的请求看起来像这样::
api.fetchData()
.timeout(30,TimeUnit.SECONDS)
.doOnNext(new Action1<Response>() {
@Override public void call(Response response) {
list = response.getDataForList();
}
}).flatMap(new Func1<Response, Observable<List<Object>>>() {
@Override public Observable<Object>> call(Response response) {
return Observable.just(list);
}
});
当我尝试调试它时,调用了,但是没有调用doOnNext()。没有调用任何生命周期方法。
只是为了澄清这里我只是回复了我在其他地方使用它的观察点,我在主线程上观察并订阅了IO。
答案 0 :(得分:2)
不要使用doOnNext,只需使用map。并尝试使用lambdas,使您的代码更具可读性。
{{1}}
现在作为概念,每次某个观察者订阅此observable都会消耗这些项目,然后observable会自动取消订阅观察者。因此,您不必担心取消订阅任何内容。
你可以在这里看到一些实际的例子。 https://github.com/politrons/reactive