2016-03-23 4 views
11

mam zauważalny jak tenCzy można uzyskać 2 wartości w onNext() subskrybenta w Androidzie rxjava?

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); 
     } 
    }); 
} 

muszę zdać ArrayList w metodzie profileListener.onProfileSet(userProfile); jak profileListener.onProfileSet(userProfile,extensions);

Czy to możliwe, aby to zrobić w zip czy istnieją jakieś inne metody rxjava do rozwiązania taki typ problemów?

+6

Jeśli nie można tego zrobić, to można po prostu zrobić nową klasę obiektów do przechowywania zarówno profil i rozszerzenia –

Odpowiedz

10

Musisz zrobić dokładnie to, co sugeruje cricket_007 w komentarzu.

Na przykład tak:

  1. utworzyć klasę, która będzie reprezentować łączne wyniki swoich obserwabli:

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

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

(Alternatywnie można użyć Pair klasę)

  1. Użyj obiektu CombinedResults (lub Pair) w swoim Observable.zipFunc2.

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); 
      } 
     });