2016-01-27 15 views
6

Benim kod şu şekildedir:Rxjava AndroidSchedulers.mainThread() UI iş parçacığı anlamına mı geliyor?

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

ama bir hata var: görüşlerini dokunabilirsiniz görünüm hiyerarşisi yarattı Sadece orijinal konu. Ben karıştı sense.So yapar

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

: yüzden değiştirin. .observeOn(AndroidSchedulers.mainThread()), abone bloğundaki kodun, ui dizisinde çalıştırıldığı anlamına geldiğini düşünmüştüm, ancak bu hatayı nasıl aldım? Yapmanız gerekenler

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

geçerli:

Sen fark olarak UI iş parçacığı üzerinde abone olamazsınız
.observeOn(AndroidSchedulers.mainThread()) 
.subscribeOn(AndroidSchedulers.mainThread()) 

, bir özel durumu alırsınız:

+0

StackTrace, 'adapter.notifyDataSetChanged() 'olarak işaret ediyor mu? Mb hata zincirin başka bir yerinde mi? Genellikle, evet, 'mainThread()', android'in UI iş parçacığı anlamına gelir. – AndroidEx

+0

StackTrace'in Adapter.notifyDataSetChanged –

cevap

6

sorun burada koduyla olduğunu I/O iş parçacığına abone olmak ve UI iş parçacığı üzerinde gözlemlemek için:

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

'a işaret edip etmediğini anlayamıyorum. Teşekkür ederim. Neden Gözlenebilir kullanıcı arabiriminde abone olamaz? –

İlgili konular