Android 如何在RxJava中刷新observable?
我有一个observable,它封装了一个HTTP请求Android 如何在RxJava中刷新observable?,android,functional-programming,reactive-programming,rx-java,Android,Functional Programming,Reactive Programming,Rx Java,我有一个observable,它封装了一个HTTP请求 mObservable = retryObservable(mService.getAddressList(getUserId(), true, 1, Integer.MAX_VALUE, "id", true) .map(r -> { return r.getItems(); }) .observeOn(AndroidSched
mObservable = retryObservable(mService.getAddressList(getUserId(), true, 1, Integer.MAX_VALUE, "id", true)
.map(r -> {
return r.getItems();
})
.observeOn(AndroidSchedulers.mainThread()));
然后订阅
mSubscription = mObservable.subscribe(items -> {
mAddressAdapter.swapItems(items);
}, getActivityBase()::showError);
当订阅初始化到来时,将激活cold observable并触发HTTP请求。现在,我知道底层数据已经改变了,我需要提出相同但新的请求。
我试过了
mSubscription.unsubscribe();
然后打电话
mObservable.subscribe(items -> {doSomething();})
同样,根据我的理解,订阅应该触发可观察的,但它不起作用。
有什么建议吗?一旦
可观察的完成,它不会发布任何新项目。这是Rx合同
将代码包装到方法中,每次都创建一个新的可观察对象
Observable<?> getObservable() {
return retryObservable(mService.getAddressList(getUserId(), true, 1, Integer.MAX_VALUE, "id", true)
.map(r -> {
return r.getItems();
})
.observeOn(AndroidSchedulers.mainThread()));
}
Observable getObservable(){
返回retryObservable(mService.getAddressList(getUserId(),true,1,Integer.MAX_值,“id”,true)
.map(r->{
返回r.getItems();
})
.observeOn(AndroidSchedulers.mainThread());
}
正如@DaveSexton在评论中提到的,在RxJava中使用defer
函数有更好的方法
在订户订阅之前,不要创建可观察对象;创建一个
每次订阅都可以看到新的内容
mSubscription = mObservable.subscribe(items -> {
mAddressAdapter.swapItems(items);
}, getActivityBase()::showError);
通行证延期( ) 一个可观察的工厂函数(一个
生成可观察对象),并延迟( ) 将返回一个可观察到的
将调用此函数重新生成其可观察序列
每次新订户订阅时
更多信息:在RxNet中,我们有一个工厂方法:。我假设RxJava有一个类似的方法。@DaveXton非常好,我将添加一个指向RxJava延迟文档的链接。以前从未听说过,谢谢。