簡體   English   中英

異步RxJava訂閱仍然引發NetworkOnMainThreadException

[英]Asynchronous RxJava Subscription Still Throws NetworkOnMainThreadException

因此,在查看了此處解決相同問題的其他答案之后,看來解決方案似乎沒有用。 這是我遇到的錯誤。 我有我的執行RxJava newThread() ,觀測者mainThread()

所以我的第一個observable發出了Observable>。 我正在使用flatMapObservable遍歷它,並使用每個整數將單個新聞項作為Observable獲得。

查看我的Http日志,我正在獲取整數列表和第一個新聞項。 然后我得到一個錯誤。

任何幫助將不勝感激。

mMainProvider.getNewestHackerStories()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(Throwable::printStackTrace)
            .flatMapIterable(ids -> ids)
            .flatMap(id -> mMainProvider.getHackerNewsItem(id))
            .subscribe(hackerNewsItem -> newStoryList.add(hackerNewsItem));

 17-12017/com.androidtitan.magicmirror W/System.err: android.os.NetworkOnMainThreadException 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.shutdownAndFreeSslNative(OpenSSLSocketImpl.java:1237) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.close(OpenSSLSocketImpl.java:1232) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.internal.Util.closeQuietly(Util.java:105) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.internal.http.StreamAllocation.deallocate(StreamAllocation.java:259) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.internal.http.StreamAllocation.streamFailed(StreamAllocation.java:306) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.internal.http.HttpEngine.close(HttpEngine.java:478) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.RealCall.getResponse(RealCall.java:273) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at okhttp3.RealCall.execute(RealCall.java:57) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:171) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.Subscriber.setProducer(Subscriber.java:211) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.Subscriber.setProducer(Subscriber.java:205) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.Observable.unsafeSubscribe(Observable.java:8666) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:250) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:147) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:74) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OnSubscribeFlattenIterable$FlattenIterableSubscriber.drain(OnSubscribeFlattenIterable.java:239) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OnSubscribeFlattenIterable$FlattenIterableSubscriber.onNext(OnSubscribeFlattenIterable.java:130) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:227) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at android.os.Looper.loop(Looper.java:158) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7224) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at java.lang.reflect.Method.invoke(Native Method) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 08-04 21:27:16.766 12017-12017/com.androidtitan.magicmirror W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

observeOn(AndroidSchedulers.mainThread())之后的所有內容都將在主線程上運行。 我想這mMainProvider.getHackerNewsItem是網絡電話,所以你應該移動observeOn右側前行subscribe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM