Android 如何使用单功能和可观察的双功能实现可观察zip?
如何使用双功能正确实现Observable.zip 一个返回一个,一个返回一个可观察的,不确定这是否可能 谢谢你的评论,这是我的更新。我不确定在下面的双功能中放什么Android 如何使用单功能和可观察的双功能实现可观察zip?,android,observable,Android,Observable,如何使用双功能正确实现Observable.zip 一个返回一个,一个返回一个可观察的,不确定这是否可能 谢谢你的评论,这是我的更新。我不确定在下面的双功能中放什么 Observable.zip( mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(), mTopicsByCurrentUserViewModel.getTopicsByCreato
Observable.zip(
mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(),
mTopicsByCurrentUserViewModel.getTopicsByCreator(getTopicsByCreatorRequest)),
new BiFunction<Single<GetUserProfileResponseBody>, Observable<Response<GetTopicsByCreatorResponseBody>>, **what do i put here**>()
);
Observable.zip(
mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(),
mTopicsByCurrentUserViewModel.getTopicsByCreator(getTopicsByCreatorRequest)),
新的双函数()
);
示例zip函数:
private Observable<String> stringObservable() {
return Observable.just("D");
}
private Observable<Integer> integerObservable() {
return Observable.just(1);
}
private Observable<String> resultObservable(){
return Observable.zip(stringObservable(), integerObservable(), new BiFunction<String, Integer, String>() {
@Override public String apply(String s, Integer integer) throws Exception {
return s + integer;
}
});
}
private Observable<String> resultObservableLambda(){
return Observable.zip(stringObservable(), integerObservable(), (s, i) -> s + i);
}
private Observable stringObservable(){
可观察到的回报。公正(“D”);
}
私有可观测积分可观测(){
可观察到的回报。仅(1);
}
私有可观测结果可观测(){
return Observable.zip(stringObservable(),integerObservable(),new BiFunction()){
@重写公共字符串应用(字符串s,整数)引发异常{
返回s+整数;
}
});
}
私有可观测结果可观测lambda(){
返回Observable.zip(stringObservable(),integerObservable(),(s,i)->s+i);
}
您缺少的第三项是退货类型。那么,您希望返回的聚合类型是什么呢?在本例中,
字符串
,因此将返回一个新的可观察的可观察的
toSingle()
将发出单个项目的可观察转换为发出该项目的单个项目
toObservable
将单个对象转换为可观察对象
例如:使用toObservable()
1-创建您的可观察对象
private Observable<String> getObservable() {
return Observable.just("observable");
}
private Single<String> singleObservable() {
return Single.just("single");
}
private Observable<String> mergedObservable() {
return Observable.zip(getObservable(), singleObservable().toObservable(), new BiFunction<String, String, String>() { //the result of merging is also String
@Override
public String apply(String s, String s2) {
return s + s2; //or if you are using different objects create a model AandB. where A and B are the result of a seperate observers.
}
});
}
private Observable getObservable(){
可观察的回报。公正(“可观察”);
}
私有单可观察(){
返回单身。只是(“单身”);
}
私有可观测合并可观测(){
返回Observable.zip(getObservable(),singleObservable().toObservable(),new BiFunction(){//合并的结果也是字符串
@凌驾
公共字符串应用(字符串s、字符串s2){
返回s+s2;//或者如果使用不同的对象,则创建模型a和B。其中a和B是单独观察者的结果。
}
});
}
2-合并它们
mergedObservable().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.d(tag,s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
mergedObservable().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribouth(新观察员){
@凌驾
认购的公共无效(一次性d){
}
@凌驾
public void onNext(字符串s){
日志d(标签s);
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
输出:observesIngle
然后在单条上添加.toObservable()
我不想合并结果,我希望getUserProfile和gettopics是单独的响应,我只希望它们同时运行,这样我可以节省时间,然后查看Rx操作符并选择一个适合您需要的,我不想合并结果,我希望getUserProfile和gettopics是单独的响应,我只是希望它们同时运行,这样可以节省时间。我认为这是一个误解。要运行两个单独的请求,只需使用subscribeOn().Zip用于合并到结果。