android – 如何刷新RxJava中的observable?

android – 如何刷新RxJava中的observable?,第1张

概述我有一个observable,它包装了一个HTTP请求 mObservable = retryObservable(mService.getAddressList(getUserId(), true, 1, Integer.MAX_VALUE, "id", true) .map(r -> { return r.getItems(); 我有一个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();})

再次,从我的理解,订阅应该触发可观察,但它不起作用.
有什么建议 ?

解决方法 Observable完成后,它不会发布任何新项目.这是Rx合同.

将代码包装到方法中,每次都创建一个新的observable.

Observable<?> getobservable() {    return retryObservable(mService.getAddressList(getUserID(),true)            .map(r -> {                return r.getItems();            })            .observeOn(AndroIDSchedulers.mainThread()));}

正如@DaveSexton在评论中提到的那样,在RxJava中使用延迟函数甚至更好

Do not create the Observable until a Subscriber subscribes; create a
fresh Observable on each subscription

Pass defer( ) an Observable factory function (a function that
generates Observables),and defer( ) will return an Observable that
will call this function to generate its Observable sequence afresh
each time a new Subscriber subscribes.

更多这里:https://github.com/ReactiveX/RxJava/wiki/Creating-Observables#defer

总结

以上是内存溢出为你收集整理的android – 如何刷新RxJava中的observable?全部内容,希望文章能够帮你解决android – 如何刷新RxJava中的observable?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1140896.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存