Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i=0;i<10;i++){
subscriber.onNext(i);
}
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())//這裏原來是要切換到主線程運行的
.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Log.i(MainActivity.class.getSimpleName(),"onCompleted");
}
@Override
public void onError(Throwable e) {
Log.i(MainActivity.class.getSimpleName(),"onError");
}
@Override
public void onNext(Integer i) {
Log.i(MainActivity.class.getSimpleName(),i+"");
}
});
}
});
上面這段代碼一直報,只有主線程才能更新View
Only the original thread that created a view hierarchy can touch its views.
可能 有人發現了錯誤,細節啊
.subscribeOn(AndroidSchedulers.mainThread())
上面的這段代碼“subscribeOn()”這個方法是設定Observable所在線程,所以,是將Observable切換到主線程了
正確的應該是調用”observeOn()”方法
.observeOn(AndroidSchedulers.mainThread())