0

我正在尝试将 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。

4

3 回答 3

2

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

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

于 2017-06-22T17:48:36.347 回答
1

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

  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()with的重载方法Action

希望能帮助到你。

于 2017-06-23T08:25:42.950 回答
0
    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() {

                   }    
               });
于 2017-06-23T08:45:58.610 回答