Можно ли получить 2 значения в onNext() абонента в rxjava android?

Я наблюдаю подобное

Observable.zip(observable, extObs, new Func2<List<UserProfile>, ArrayList<Extension>, UserProfile>() {
        @Override
        public UserProfile call(List<UserProfile> userProfiles, ArrayList<Extension> extensions) {


            return userProfiles.get(0);
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).unsubscribeOn(Schedulers.io()).subscribe(new Subscriber<UserProfile>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(UserProfile userProfile) {
            profileListener.onProfileSet(userProfile);
        }
    });
}

Мне нужно передать ArrayList в методе profileListener.onProfileSet(userProfile); как profileListener.onProfileSet(userProfile,extensions);

Можно ли это сделать в zip или есть ли какие-либо другие методы rxjava для решения таких проблем?

Ответ 1

Вы должны сделать именно то, что cricket_007, предложенное в комментарии.

Например, например:

  • Создайте класс, который будет представлять собой комбинированные результаты ваших наблюдаемых:

class CombinedResults {
    public UserProfile userProfile;
    public List<Extension> extensions;

    public CombinedResults(UserProfile userProfile, List<Extension> extensions) {
        this.userProfile = userProfile;
        this.extensions = extensions;
    }
}

(В качестве альтернативы вы можете использовать Pair класс)

  1. Используйте объект CombinedResults (или Pair) в Observable.zip Func2.

Observable.zip(observable, extObs,
        new Func2<List<UserProfile>, ArrayList<Extension>, CombinedResults>() {
            @Override
            public CombinedResults call(List<UserProfile> userProfiles, ArrayList<Extension> extensions) {
                return new CombinedResults(userProfiles.get(0), extensions);
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .unsubscribeOn(Schedulers.io())
        .subscribe(new Subscriber<CombinedResults>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }

            @Override
            public void onNext(CombinedResults combined) {
                profileListener.onProfileSet(combined.userProfile, combined.extensions);
            }
        });