2016-04-05 45 views
1

我想运行3个observable,并将结果设置为一个recyclerview适配器。有没有更好的方法来同时运行许多观察对象。我有3个这样的观察对象,我正在单独运行它们。有没有更好的方法来实现我想要实现的目标。在rxjava中一次运行很多观察对象?

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

你已经有种运行它们一次,即每个呼叫认购不堵,在你的例子。你可以将你的可观察事物合并或组合成一个大的可观察事物,但事实是它们都需要不同的处理来干涉这个意图。 – AndroidEx

回答

0

您应该使用Zip或合并

这将引发三个观测。

邮编观测量:

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

合并观测量:

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