2017-02-09 68 views
0

我有一個使用RxJava從數據庫中檢索的視頻列表。我想在RecyclerViews中顯示這些視頻,並沿途生成縮略圖。問題是,縮略圖RxJava一個接一個發射物品

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(localVideo.getFilename(), 
        MediaStore.Images.Thumbnails.MINI_KIND); 

的產生速度太慢,以至於當我有很多的視頻在我的名單是塊屏幕的加載。

我想知道的是我的視頻列表檢索的方式是每個項目都是逐一發布而不是整個列表,並且在處理完成後生成每個項目(生成縮略圖) 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爲「展開」內部名單:

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

如果我不喜歡這樣,返回TOI的UI之前加載所有的縮略圖所有的元素,那麼我仍然需要等到生成縮略圖才能看到屏幕上的內容 –

+0

您是否嘗試過這個示例?它會在不同的行上打印每個數字,也就是說,這種模式會在最後得到單個縮略圖,而不是它們的列表。 – akarnokd

相關問題