2017-02-23 8 views
-3
私はRxjava2で働いている

、私は構造以下でRxJavaにflatmapを使用していNetworkOnMainThreadException時に観察可能subscrible 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にエラーが発生しました。私はそれを修正する方法を知らない。あなたがupdateProfileのために....ちょうどまた、それを実行する必要があることを行っているようにあなたは非UIスレッドでサブスクライブしたいことを指定する必要が

+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

は...例えば

.subscribeOn(Schedulers.io()) 

は実際には、見えますcreateUser

+0

それは役に立ちますが、まだ解決していません。 –

+0

あなたはまだそれを追加した後 'NetworkErrorOnMainThread'を取得していますか? +完全なエラー+あなたの更新されたコードを追加できますか? –