RxJava: получить данные из базы данных и вернуть список - PullRequest
1 голос
/ 27 июня 2019

Я использую RxJava в своем проекте Android, я хочу извлечь все объекты User из таблицы, используя RxJava, асинхронно и вернуть список List адаптеру myAdapter(Context context, List<User> users).

Но теперь у меня может быть только Single<User>, как мне получить список напрямую и вставить его в мой адаптер?

Мой код:

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

А в моем vm:

public Single<List<User>> getUserList() {
    return Single.fromCallable(() -> myDatabaseRepository.getUsers());
}

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Вам нужно только вызвать метод 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, затем подписываетесь на них и получаете данные в методах success / error для отображения в пользовательском интерфейсе для пользователя.

0 голосов
/ 27 июня 2019
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
}
...