【发布时间】:2017-05-07 03:11:29
【问题描述】:
早上好,我最近开始玩 RxJava,但遇到了一个问题。
我在 ViewPager 中有一个 Fragment,它在 onViewCreated() 上启动一个 HTTP 请求(由 Retrofit 和 RxJava 处理)以检索字符串列表。 它的实现方式是创建订阅并将其添加到 CompositeSubscription 对象
这里是代码
final Subscription subscription = MyManager.getService().getListStringsFromWeb()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<String>() {
@Override
public void onCompleted() {
// DO NOTHING
}
@Override
public void onError(Throwable e) {
// DO SOMETHING
}
@Override
public void onNext(List<String> result) {
returnResultToView(result);
}
});
addSubscription(subscription);
在 onViewCreated() 的 Fragment 中,我检查结果是否存在,如果没有我们调用上面的方法,如果有我们很高兴。
问题是当我旋转设备时,“第一个”订阅尚未返回,因此片段不会记住数据,它会启动另一个搜索,如果我继续旋转我继续添加订阅
我想知道是否有办法保留第一个订阅,当它的结果到达时,只需将其返回给 Fragment 并忽略所有其他订阅
一步一步想要的行为:
- 启动片段和请求
- 屏幕显示加载图像和启动订阅/请求的背景
- 自第一个请求仍处于挂起状态以来,多次屏幕旋转保持加载图像
- 第一次调用的结果返回后,将其返回到片段,从而隐藏加载图像并显示结果
非常感谢
【问题讨论】:
标签: android rx-java observable rx-android subscriptions