亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java.lang.IllegalStateException:預計在主線程上調用

java.lang.IllegalStateException:預計在主線程上調用

滄海一幻覺 2023-08-16 10:20:52
我是新來的。我正在嘗試使用適用于 Android 的 RxJava 庫,但出現錯誤。邏輯是處理按鈕上的點擊事件,然后將其映射到從 獲取值EditText,然后通過網絡將flatmap其解析為值。Single<String>我嘗試flatmap使用 IO 線程運行Schedulers.io(),但出現錯誤:E/MainActivity: Login error    java.lang.IllegalStateException: Expected to be called on the main thread but was RxCachedThreadScheduler-1        at com.jakewharton.rxbinding3.internal.Preconditions.checkMainThread(mainThread.kt:28)        at com.jakewharton.rxbinding3.view.ViewClickObservable.subscribeActual(ViewClickObservable.kt:35)        at io.reactivex.Observable.subscribe(Observable.java:12267)        at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:32)        at io.reactivex.Observable.subscribe(Observable.java:12267)        at io.reactivex.internal.operators.observable.ObservableFilter.subscribeActual(ObservableFilter.java:30)        at io.reactivex.Observable.subscribe(Observable.java:12267)        at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)        at io.reactivex.Observable.subscribe(Observable.java:12267)        at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:32)        at io.reactivex.Observable.subscribe(Observable.java:12267)        at io.reactivex.internal.operators.observable.ObservableFlatMapSingle.subscribeActual(ObservableFlatMapSingle.java:48)        at io.reactivex.Observable.subscribe(Observable.java:12267)有人可以幫我解決這個問題嗎?我需要在后臺線程上運行網絡調用,但在主線程上接收結果。
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

您正在使用事件.subscribeOn(Schedulers.io())源RxView.clicks(this.btnNext)。這意味著RxView將在 IO 線程上訂閱,但這是不允許的。您應該Single<String>通過 為您的源配置調度程序flatMapSingle(key -> new Api(key).id().subscribeOn(Schedulers.io()))。所以完整的代碼應該是:


RxView.clicks(this.btnNext)

  .map(none -> this.editTextKey.getText().toString())

  .filter(x -> !x.isEmpty())

  .flatMapSingle(key -> new Api(key).id().subscribeOn(Schedulers.io()))

  .observeOn(AndroidSchedulers.mainThread())

  .subscribe(this::showId, err -> {

    Log.e(this.getClass().getSimpleName(), "Login error", err);

  })

現在網絡操作將在IO線程上進行,查看訂閱在主線程上。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號