Невозможно использовать RX Android Observable.zip оператор - PullRequest
0 голосов
/ 08 января 2019

Я использую оператор rx-android zip для объединения двух модернизированных вызовов.

Ранее код был таким:

  affinityService.rewardsStatusChanges()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .compose(this.<RewardsStatus>bindToLifecycle())
            .subscribe(new Action1<RewardsStatus>() {
                @Override
                public void call(RewardsStatus rewardsStatus) {
                    onRewardStatus(rewardsStatus);
                }
            });

    affinityService.affinityStatusChanges()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .compose(this.<AffinityStatus>bindToLifecycle())
            .subscribe(new Action1<AffinityStatus>() {
                @Override
                public void call(AffinityStatus affinityStatus) {
                    onAffinityStatus(affinityStatus);
                }
            });

rewardsStatusChanges () и affinityStatusChanges () являются двумя вызовами дооснащения.

Теперь мне нужно объединить их.

Что я пробовал:

affinityService.rewardsStatusChanges()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(this.<RewardsStatus>bindToLifecycle())
                .flatMap(new Func1<RewardsStatus, Observable<RewardsStatus>>() {
                    @Override
                    public Observable<RewardsStatus> call(RewardsStatus rewardsStatus) {
                        return Observable.just(rewardsStatus);
                    }
                })
                .flatMap(new Func1<RewardsStatus, Observable<RewardsStatus>>() {
                    @Override
                    public Observable<RewardsStatus> call(RewardsStatus rewardsStatus) {
                        return Observable.zip(Observable.just(rewardsStatus),
                        affinityService.affinityStatusChanges(),new Func2<RewardsStatus, AffinityStatus, RewardsStatus>() {
                                    @Override
                                    public RewardsStatus call(RewardsStatus rewardsStatus, AffinityStatus affinityStatus) {
                                        onAffinityAndRewardsMerged(rewardsStatus,affinityStatus);
                                        return null;
                                    }

                        });
                    }
                });

Но, к сожалению, приведенная выше кодовая база не работает. Любая идея, как это сделать.

Я использую:

RX_ANDROID_VERSION=1.0.1
RX_JAVA_VERSION=1.0.14

1 Ответ

0 голосов
/ 08 января 2019
Публикация

по вашему желанию, однако с этим возвращаемым нулем в анонимной функции вы получите нулевое значение для вашего потребителя, поэтому я думаю, что возвращение, как Pair<RewardsStatus,AffinityStatus>, будет более приятным, и в результате обработчик результата будет получен.

 Observable.zip(affinityService.rewardsStatusChanges(), affinityService.affinityStatusChanges(),
            object : Func2<RewardsStatus, AffinityStatus, RewardsStatus>() {
                fun call(rewardsStatus: RewardsStatus, affinityStatus: AffinityStatus): RewardsStatus? {
                    onAffinityAndRewardsMerged(rewardsStatus, affinityStatus)
                    return null
                }
            })
...