2016-03-23 6 views
11

Ben profileListener.onProfileSet(userProfile,extensions);rxjava android abonesi onNext() 2 değer almak mümkün mü?

olarak yönteminde profileListener.onProfileSet(userProfile); yılında ArrayList geçmesi gerekiyor bu

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

gibi gözlemlenebilir zip bunu mümkün mü veya çözmek rxjava başka yöntemler var ettik bu tür problemler?

+6

Bunu yapamıyorsanız, o zaman sadece profil ve uzatma hem tutmak için yeni bir nesne sınıfını yapabilir –

cevap

10

cricket_007 yorumunda önerilenleri tam olarak yapmanız gerekir.

  1. senin gözlenebilirlerin birleşik sonuçları temsil edecek bir sınıf oluşturun:

    böyle Örneğin

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

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

(Alternatif Pair sınıfını kullanabilirsiniz)

  1. (veya Pair) ürününün bir nesnesini, Observable.zipFunc2 ürününüzde kullanın.

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