2017-02-09 91 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

相关问题