2016-04-05 10 views
1

3 gözlenebilirliği çalıştırmaya çalışıyorum ve sonucu bir recyclerview adaptörüne ayarlıyorum. Bir kerede birçok gözlenebilirliği çalıştırmanın daha iyi bir yolu var mı? Bunun gibi 3 gözlenebilirim var ve onları ayrı ayrı çalıştırıyorum. Başarmaya çalıştığım şeyi elde etmenin daha iyi bir yolu var mı?rxjava'da bir kerede birçok gözlenebilirliği çalıştırın?

Observable<AudioItems> observableTrend = audioModel.getTrendingMusic("all-audios",userId); 
    Observable<AudioItems> observableTop = audioModel.getTrendingMusic("top-audios",userId); 
    Observable<AudioItems> observableRecent = audioModel.getTrendingMusic("recent-audios",userId); 
    observableTrend.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).unsubscribeOn(Schedulers.io()) 
      .subscribe(new Subscriber<AudioItems>() { 
       @Override 
       public void onCompleted() { 
       } 

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

       @Override 
       public void onNext(AudioItems audioItems) { 
        recyclerViewTrending.setAdapter(new AudiosRecyclerAdapter(getActivity(), audioItems.getAudios(), loginFlag)); 

       } 

      }); 

    observableTop.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).unsubscribeOn(Schedulers.io()) 
      .subscribe(new Subscriber<AudioItems>() { 
       @Override 
       public void onCompleted() { 
       } 

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

       @Override 
       public void onNext(AudioItems audioItems) { 
        recyclerViewTop.setAdapter(new AudiosRecyclerAdapter(getActivity(), audioItems.getAudios(), loginFlag)); 

       } 

      }); 

    observableRecent.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).unsubscribeOn(Schedulers.io()) 
      .subscribe(new Subscriber<AudioItems>() { 
       @Override 
       public void onCompleted() { 
       } 

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

       @Override 
       public void onNext(AudioItems audioItems) { 
        recyclerViewRecent.setAdapter(new AudiosRecyclerAdapter(getActivity(), audioItems.getAudios(), loginFlag)); 

       } 

      }); 
+0

Zaten tür yani sizin örnekte, engellemediğinden abone olmak her çağrı, tek seferde çalışan. Gözlemlerinizi bir gözlemlenebilir büyüklükte birleştirebilir veya birleştirebilirsiniz, ancak bunların hepsinin sonunda farklı bir tedaviye ihtiyaç duyması gerçeği bu amaca yöneliktir. – AndroidEx

cevap

0

Sen Zip kullanmalısınız veya üç gözlenebilirleri atacağım

birleşir.

Posta Gözlenebilirler:

@Test 
public void testZip() { 
    long start = System.currentTimeMillis(); 
    Observable.zip(obString(), obString1(), obString2(), (s, s2, s3) -> s.concat(s2) 
                     .concat(s3)) 
       .subscribe(result -> showResult("Sync:", start, result)); 
} 


public void showResult(String transactionType, long start, String result) { 
    System.out.println(result + " " + 
           transactionType + String.valueOf(System.currentTimeMillis() - start)); 
} 

public Observable<String> obString() { 
    return Observable.just("") 
        .map(val -> "Hello"); 
} 

Birleştirme Gözlenebilirler:

@Test 
public void testMerge() { 
    Observable.merge(obPerson(), obPerson1()) 
       .subscribe(result -> showResult(result.toString())); 
} 

private void showResult(String s) { 
    System.out.println(s); 
    System.out.println(++count); 
} 

public Observable<Person> obPerson() { 
    return Observable.just(new Person("John", 34, null)); 
} 

public Observable<Person> obPerson1() { 
    return Observable.just(new Person(null, 25, "male")); 
} 
İlgili konular