我在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());
}
答案 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
}