【问题标题】:Code can not compile when I try to use RxJava 2 with Room当我尝试将 RxJava 2 与 Room 一起使用时,代码无法编译
【发布时间】:2017-06-22 17:42:32
【问题描述】:

我正在尝试将 RxJava 2 与 Room ORM 一起使用,但是当我尝试使用 RxJava 2 时,我的代码无法编译。

这是来自 Contacts Dao 的代码。

@Dao
public interface ContactsDao {

@Query("SELECT * FROM contact")
Flowable<List<Contact>> getAll();

@Insert(onConflict = REPLACE)
void insert(Contact contact);

}

我该如何解决这个问题?

编辑:

当我更改为 subscribeWith 时,我收到此错误:

没有 DisposableSubscriber。

【问题讨论】:

    标签: android rx-android rx-java2 android-room


    【解决方案1】:

    由于 RxJava2 实现了 Reactive-Streams 标准,subscribe 返回 void

    为方便起见,为 Flowable 类型添加了方法 subscribeWith,该方法返回提供的一次性用品,这将使您的代码按预期运行。

    【讨论】:

    • 当我更改为 subscribeWith 时,它仍然显示相同的错误。
    • 使用DisposableSubscriber 基类而不是FlowableSubscriber
    • 是的,DisposableSubscriber
    • @EpicPandaForce 我不能在订阅方法中使用 DisposableSubscribe 的新实例。我将使用新图片编辑问题。
    【解决方案2】:

    您应该对订阅方法进行不同的重载。

      CompositeDisposable compositeDisposable = new CompositeDisposable();
      compositeDisposable.add(Observable.just(new String()).subscribe(new Consumer<String>() {
                @Override
                public void accept(String s) throws Exception {
    
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
    
                }
            }));
    

    不要使用Observer 订阅它,而是尝试使用Consumers 订阅onNext()onError()。还有onComplete()Action 的重载方法。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:
          compositeDisposable.add(Flowable.just("blah").subscribeWith(new DisposableSubscriber<String>() {
                      @Override
                      public void onNext(String s) {
      
                      }
      
                      @Override
                      public void onError(Throwable t) {
      
                      }
      
                      @Override
                      public void onComplete() {
      
                      }
                  }));
      

      这应该有效,所以在你的情况下应该是

      disposable.add(Db.with(context).getContactsDao().findAll()
                     .subscribeOn(Schedulers.io())
                     .observeOn(AndroidSchedulers.mainThread())
                     .subscribeWith(new DisposableSubscriber<List<Contact>>() {
                         @Override
                         public void onNext(List<Contact> contacts) {
      
                         }
      
                         @Override
                         public void onError(Throwable t) {
      
                         }
      
                         @Override
                         public void onComplete() {
      
                         }    
                     });
      

      【讨论】:

        猜你喜欢
        • 2014-07-02
        • 2018-11-05
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 2019-05-23
        相关资源
        最近更新 更多