我有一个简单的改装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上订阅。
最佳答案
不要用Doonnext,只要地图就行了。并尝试使用lambdas,使代码更具可读性。
api.fetchData()
.timeout(30,TimeUnit.SECONDS)
.map(response -> response.getDataForList())
.flatMap(list -> Observable.just(list));
现在作为一个概念,每当某个观察者订阅这个观察者时,它会消耗这些项,然后观察者会自动取消订阅这个观察者。所以你不用担心退订。
你可以在这里看到一些实际的例子。https://github.com/politrons/reactive