RxJava:从数据库检索数据并返回列表

时间:2019-06-27 11:38:48

标签: android rx-java rx-java2

我在Android项目中使用RxJava,我想异步地使用RxJava从表中检索所有实体User,并将列表List返回到适配器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());
}

2 个答案:

答案 0 :(得分:1)

您只需要调用users方法并使用相应的方法处理成功/错误。

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
      }
   });

是的,这是从数据库/网络检索数据的常规方法。您从存储库中公开Observables / Singles,然后订阅它们并以成功/错误方法接收数据,以在UI中向用户显示。

答案 1 :(得分:0)

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
}