2017-09-20 76 views
0

我有一個簡單的工作是使用GreenDao選擇數據。另外我想顯示ProgressWheel,但是這個作業阻止了UI線程。RxAndroid塊UI線程

showLoader(); 

    DataManager.getInstance(this).getQuestions(0, 800) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .map(QuestionUtils::shuffleAnswers) 
      .subscribe(this::onFinishLoad); 

而且

public Observable<List<Question>> getQuestions(int offset, int limit) { 
      return Observable.fromCallable(() -> daoSession.getQuestionDao().queryBuilder() 
      .offset(offset) 
      .limit(limit) 
      .build().list()); 
} 

回答

3

它阻止,因爲你的操作順序的。

DataManager.getInstance(this) 
     .getQuestions(0, 800) 
     .map(QuestionUtils::shuffleAnswers) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(this::onFinishLoad); 

應該解決它。否則你會訂閱數據並在之後映射它們。

如果你想完成加載器onec你的數據發出,你可以在你的subscribe方法中使用動作,並在你的發射nextData中處理加載。

.subscribe (nextData -> {}, error -> {},() -> doCompletedStuff())