2017-02-09 13 views
0

У меня есть список видео, извлеченных из базы данных с помощью RxJava. Я хочу отображать эти видео в RecyclerViews и генерировать эскиз на этом пути. Проблема заключается в том, что генерация миниатюрRxJava для испускания элементов один за другим

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

слишком медленно, так что, когда у меня есть много видео на моем списке он блокирует загрузку экрана.

Что я хотел бы знать, так это то, что мой список видео извлекается таким образом, что каждый элемент испускается один за другим, а не как список в целом, и подает каждый элемент, как это делается обработкой (генерирование миниатюры), чтобы пользовательский интерфейс (возможно, этот подход не является даже правильным).

Это моя загрузка видео Код:

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

Если я делаю это так, загрузив все эскизы, прежде чем вернуться тои интерфейс все элементы, тогда мне все еще нужно подождать, пока миниатюры не будут сгенерированы, чтобы что-то увидеть на моем экране. –

+0

Пробовали ли вы пример? Он будет печатать каждый номер на другой строке, т. Е. Этот шаблон даст вам отдельные значки в конце, а не их список. – akarnokd