您好我是RXJava
的新手。
我试图从包含一个arraylist的多个Observable中获取Users
。我想合并两个数据并将其发布到Observer。
这是我的代码段。
Observable<Users> baseDataObservable = mService.getUsers(Constants.SITE);
Items items = new Items();
items.setName("User Defined...");
items.setImageURL("http://www.proto.gr/sites/www.proto.gr/files/styles/colorbox/public/images/fruits/cherry.png");
ArrayList<Items> items1 = new ArrayList<>();
items1.add(items);
Users users = new Users();
users.setItems(items1);
Observable<Users> usersObservable = Observable.just(users);
Observable.merge(baseDataObservable, usersObservable)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
在上面的代码中,第一个observable带来了来自API的数据,第二个带来了用户定义的数据。
但是当我在观察者上使用merge
时,ArrayList<Items>
中只有单个数据设置定义数据,最初来自api的数据显示第二个可观察数据提供的数据。
有人可以帮助我
答案 0 :(得分:1)
如果您尝试“合并”两个来源的阵列列表,并且需要将这些列表合并到一个列表中,则需要使用zip
运算符而不是merge
。
merge
运算符将在任何可观察量触发时立即发出项目,其中zip
将从所有输入可观察量中收集结果并在此之后继续。
在你的方法中,观察者将触发两次,结果为2。首先是用户定义的项目, 然后来自API的结果(自API调用以来有延迟)
尝试这样来获得综合结果
Observable.zip(baseDataObservable, usersObservable, new BiFunction<Users, Users, ArrayList<Items>>() {
@Override
public ArrayList<Items> apply(Users usersFromApi, Users usersUserDefined) throws Exception {
ArrayList<Items> itemsArrayList = new ArrayList<>();
itemsArrayList.addAll(usersFromApi.getItems());
itemsArrayList.addAll(usersUserDefined.getItems());
return itemsArrayList;
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<ArrayList<Items>>() {
@Override
public void onNext(ArrayList<Items> items) {
// here is the combined Arraylist
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});