不能合并RXJava2
嗨,我是新来的不能合并RXJava2,java,observable,rx-java2,Java,Observable,Rx Java2,嗨,我是新来的RXJava 我试图从包含arraylist的多个Observable中获取用户。我想合并这两个数据并将其发布到Observer 这是我的片段 Observable<Users> baseDataObservable = mService.getUsers(Constants.SITE); Items items = new Items(); items.setName("User Defined..."); items.setImag
RXJava
我试图从包含arraylist的多个Observable中获取用户
。我想合并这两个数据并将其发布到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 baseDataObservable=mService.getUsers(Constants.SITE);
项目=新项目();
items.setName(“用户定义…”);
items.setImageURL(“http://www.proto.gr/sites/www.proto.gr/files/styles/colorbox/public/images/fruits/cherry.png");
ArrayList items1=新的ArrayList();
项目1.添加(项目);
用户=新用户();
users.setItems(items1);
Observable usersObservable=Observable.just(用户);
合并(baseDataObservable,usersObservable)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.签署(观察员);
在上面的代码中,第一个observable从API获取数据,第二个将用户定义的数据放入
但是,当我在observer上使用merge
时,我在ArrayList
中只有一个数据,它是设置定义的数据,最初来自api的数据显示第二个可观察对象提供的数据
有人能帮我吗如果您试图“合并”从这两个来源获得的数组列表,并且需要将它们合并到一个列表中,则需要使用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() {
}
});
Observable.zip(baseDataObservable、usersObservable、new BiFunction(){
@凌驾
public ArrayList apply(Users usersFromApi,Users usersUserDefined)引发异常{
ArrayList itemsArrayList=新建ArrayList();
addAll(usersFromApi.getItems());
itemsArrayList.addAll(usersUserDefined.getItems());
返回项目列表;
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.认购(新的可处置观察员){
@凌驾
public void onNext(数组列表项){
//这是组合的Arraylist
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
merge不会覆盖任何数据。baseDateObservable可能是空的,或者需要更长的时间才能返回数据。是的,baseDateObservable需要一些时间才能返回数据,那么我如何合并它呢?所以这里它不会自动合并,我们需要自动合并数据集。是因为我的数据不知道何时可用吗?merge
运算符不合并结果。它将两个或多个观察值合并在一起,并且每当任何合并的观察值触发时,该组合的观察值将发出,但zip
将等待来自所有组合观察值的完整信号,并且仅在所有组合观察值完成后才进入下一级,查看并