2017-02-23 154 views
-3

Я работаю с Rxjava2,NetworkOnMainThreadException когда Наблюдаемые subscrible rxjava

Я использую flatmap в RxJava с ниже структуры:

Observable1.flatmap() и вернуться к наблюдаемым 2.

ниже кодов:

getApi().createUser(os, deviceToken) 
      .compose(view.regisObserver()) 
      .subscribeOn(Schedulers.io()) 
      .flatMap(result -> { 
       String user_token = result.data.user_token; 
       getPreferenceStore().setAuthToken(user_token); 

       setReadPolicy(); 

       Observable<ObjectDto<UserProfile>> obs = getApi().updateProfile(null, null, null); 
         obs.compose(view.regisObserver()); 

       return obs; 
      }) 
      .subscribe(result-> { 
       getPreferenceStore().setUserId(result.data.user_id); 

      //     view.onUpdateProfile(); 
      }, Throwable::printStackTrace); 

@Override 
public <T> ObservableTransformer<T, T> regisObserver() { 
    return observable -> observable.compose(prepare()) 
      .doOnSubscribe(disposable -> showProgressDialog()) 
      .doOnComplete(this::closeProgressDialog) 
      .doOnError(throwable -> { 
       if (BuildConfig.DEBUG) { 
        throwable.printStackTrace(); 
       } 
       showProgressDialog(); 
       closeProgressDialog(); 
      }); 

} 

Код компилируется без ошибок. Он получил ошибку во время выполнения NetworkErrorOnMainThread. Я не знаю, как это исправить.

+0

Вы не должны запускать сетевые вызовы MainThread, использовать отдельный поток. –

+1

Cmon, было так много ответов ... http://stackoverflow.com/questions/34349334/rxjava-and-retrofit2-networkonmainthreadexception http://stackoverflow.com/questions/27687907/android-os-networkonmainthreadexception- using-rxjava-on-android http://stackoverflow.com/questions/33390532/networkonmainthreadexception-with-retrofit-beta2-and-rxjava http://stackoverflow.com/questions/23447077/android-rxjava-non-blocking – Than

ответ

4

Вы должны указать, что вы хотите подписаться на не-UI нить ... например

.subscribeOn(Schedulers.io()) 

На самом деле, похоже, как вы делаете это для updateProfile .... просто нужно также сделать для createUser

+0

Это полезно, но пока не решить. –

+0

Вы все еще получаете 'NetworkErrorOnMainThread' после добавления этого? Можете ли вы добавить полную ошибку, которую вы получаете + ваш обновленный код. –