我有一个简单的改装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

09-03 20:47