RxJava:从数据库和 return 列表中检索数据

RxJava : retrieve data from database and return a list

我在我的 Android 项目中使用 RxJava,我想使用 RxJava 异步地从 table 检索所有实体 User 并且 return 列表列表到适配器 myAdapter(Context context, List<User> users).

但是现在我只能有Single<User>,我怎样才能直接获取列表并将其放入我的适配器中?

我的代码:

// here vm.getUserList() should return a List<User>
MyAdapter adapter = new MyAdapter(context, vm.getUserList());
...

在我的虚拟机中:

public Single<List<User>> getUserList() {
    return Single.fromCallable(() -> myDatabaseRepository.getUsers());
}
private void fetchUser() {
            ('function returning Single<List<User>>').subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::onSuccess, this::onFail);
}

private void onSuccess(List<User> users) {
    //handle user model here
}

private void onFail(Throwable t) {
    //handle error here
}

只需要调用users方法,在相应的方法中处理success/error即可。

getUserList()
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .doOnSuccess(new Consumer<List<User>>() {
      @Override
      public void accept(List<User> users) throws Exception {
         // fill adapter
         MyAdapter adapter = new MyAdapter(context, users);
      }
   })
   .doOnError(new Consumer<Throwable>() {
      @Override
      public void accept(Throwable throwable) throws Exception {
         // handle error
      }
   });

是的,这是从 database/network 中检索数据的正常方法。您从存储库公开 Observables/Singles,然后订阅它们并在 success/error 方法中接收数据以在 UI 中显示给用户。