2016-01-27 10 views
6

私のコードは次のようである:Rxjava AndroidSchedulers.mainThread()はUIスレッドを意味しますか?

.observeOn(AndroidSchedulers.mainThread()) 
.subscribeOn(AndroidSchedulers.mainThread()) 
.subscribe ({ 
    adapter.notifyDataSetChanged() 
}) 

が、私はエラーました:その景色に触れることができるビュー階層を作成しのみ元のスレッドを。 ので、私はそれを変更します。それは私が混乱していますsense.Soます

.observeOn(AndroidSchedulers.mainThread()) 
.subscribeOn(AndroidSchedulers.mainThread()) 
.subscribe ({ 
     runOnUiThread(Runnable { 
      adapter.notifyDataSetChanged() 
}) 
} 

。 私は.observeOn(AndroidSchedulers.mainThread())というのは、サブスクリプションブロック内のコードがUIスレッド上で実行されることを意味していましたが、このエラーはどうでしたか?

+0

stacktraceが 'adapter.notifyDataSetChanged()'を指していますか? Mbエラーはチェーンの別の部分にありますか?一般的に、はい、 'mainThread()'はアンドロイドのUIスレッドを意味します。 – AndroidEx

+0

stacktraceがadapter.notifyDataSetChangedを指しているかどうかを判断する方法が分かりません –

答えて

6

問題は、ここでのコードである:

.observeOn(AndroidSchedulers.mainThread()) 
.subscribeOn(AndroidSchedulers.mainThread()) 

あなたが気づいたとしてあなたはUIスレッド上で購読することができない、あなたは例外得るでしょう:あなたは何をすべき

Only the original thread that created a view hierarchy can touch its views.

をされますI/Oスレッドに登録してUIスレッドで監視する:

.subscribeOn(Schedulers.io()) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe() 
+0

ありがとうございます。 ObservableがUIスレッドを購読できないのはなぜですか? –

関連する問題