【问题标题】:rxjava2 - how to pass in a consumer as parameterrxjava2 - 如何将消费者作为参数传递
【发布时间】:2017-06-08 10:38:40
【问题描述】:

我在 android 中使用以下 rxjava 依赖项:

 compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

我正在尝试创建一个将观察者作为参数的方法。我有一些问题,我认为是因为这是 rxjava2,所以事情已经更新,我有点困惑。

让我告诉你我想要完成什么:

private Subscription subscription = Scriptions.empty(); //this isn't working. how to set a empty observer IN RXJAVA2?

protected abstract Observable buildUseCaseObservable(); //RETROFIT WILL BUILD THE OBSERVABLE FOR ME SOMEWHERE ELSE


public void execute(Consumer UseCaseSubscriber){
    this.subscription = this.buildUseCaseObservable()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(UseCaseSubscriber); //THIS LINE IS NOT WORKING , ERROR IS IN THE PHOTO
}

public void unsubscribe(){
    if(!subscription.isUnsubscribed()){
        subscription.unsubscribe();
    }
}

基本上,我正在尝试创建一个方法,该方法将接受观察者/消费者作为参数,并在改造完成后使用它来更新 UI(作为可观察者)。

更新: 好的,我将其更改为一次性用品。现在我想存放我拿回来但它不工作的一次性用品。

protected abstract Observable buildUseCaseObservable();

    @SuppressWarnings("unchecked")
    public void execute(Observer UseCaseSubscriber){
        this.subscription = this.buildUseCaseObservable()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(UseCaseSubscriber);
    }

    public void unsubscribe(){
        if(!subscription.isUnsubscribed()){
            subscription.unsubscribe();
        }
    }

我收到以下警告:

我想将整个内容存储在订阅(或您推荐的任何其他内容)中的原因是,我可以随时取消订阅。

但是来自docs:

由于 Reactive-Streams 基接口,org.reactivestreams.Publisher 将 subscribe() 方法定义为 void,Flowable.subscribe(Subscriber) 不再返回任何 Subscription(或 Disposable)。其他基本反应类型也遵循此签名及其各自的订阅者类型。

那么如何保存一次性用品以便我们可以退订呢?

【问题讨论】:

标签: rx-java2


【解决方案1】:

Subscription 已在 2.x 版本中“重命名”为 Disposable。您可以阅读 rxJava wiki 上有关此更改的说明 here

那么如何保存一次性用品以便我们可以退订呢? Flowable.subscribe(Subscriber) 不会返回一次性用品,但 Observable.subscribe(Subscriber) 会。如果您不需要背压,只需将您的Flowable 转换为Observable.toObservable()

【讨论】:

  • 感谢将其更改为一次性作品,但我更新了我的问题,你能帮忙吗?我需要将整个内容存储在订阅中以便之后取消订阅
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2019-11-23
  • 1970-01-01
  • 2021-11-06
  • 2020-11-23
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多