AndroidSchedulers.mainThread()無法切換到主線程,原來是細節問題啊

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())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章