Android 如何在RxJava中刷新observable?

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

我有一个observable,它封装了一个HTTP请求

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延迟文档的链接。以前从未听说过,谢谢。