2017-02-09 4 views
0

RxJavaを使用してデータベースから取得したビデオのリストがあります。これらのビデオをRecyclerViewsに表示し、途中でサムネイルを生成したいと思います。問題は、サムネイルの生成が遅すぎるため、リストに多数の動画があると画面の読み込みがブロックされるため、サムネイルの生成が遅すぎるということです。RxJavaがアイテムを1つずつ放出する

私が知りたいのは、リスト全体ではなく各アイテムが1つずつ発行され、各アイテムが処理(サムネイルの生成)されたときにフィードされるという方法でビデオリストを取得することです。 UI(おそらくこのアプローチは正しいものではありません)。

これは私のビデオの読み込みコードです:

public void loadVideoList() { 


     Subscriber<List<LocalVideo>> subscriber = new Subscriber<List<LocalVideo>>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e) { 
       if (isViewAttached()) { 
        Timber.e("Error retrieving local videos", e); 
        getView().showError(); 
       } 
      } 

      @Override 
      public void onNext(List<LocalVideo> videoList) { 
       if (isViewAttached()) { 
        getView().showVideoList(videoList); 
        if(videoList.isEmpty()) { 
         getView().showNoVideos(); 
        } 
       } 
      } 
     }; 
     mStoredVideoRepository 
       .getLocalVideos() 
       .subscribeOn(mScheduleProvider.computation()) 
       .observeOn(mScheduleProvider.ui()) 
       .subscribe(subscriber); 
     addToSubscriptions(subscriber); 
    } 

答えて

1

使用flatMapIterable内側のリスト「アンロール」するために:私はTOIにUIを返す前にすべてのサムネイルをロードし、このようにそれを行う場合

Observable.fromCallable(() -> Arrays.asList(1, 2, 3, 4, 5, 6)) 
.subscribeOn(Schedulers.io()) 
.flatMapIterable(v -> v) 
.observeOn(Schedulers.computation()) 
.map(v -> v * 2) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(System.out::println); 
+0

をすべての要素は、私はまだ私の画面上に何かを見るためにサムネイルが生成されるまで待つ必要があります –

+0

例を試しましたか?これは、それぞれの番号を別の行に出力します。つまり、このパターンは、リストの最後ではなく個々のサムネイルを取得します。 – akarnokd

関連する問題