2016-08-05 5 views
0

Also nach dem Betrachten anderer Antworten auf hier die gleiche Frage zu lösen sieht es nicht aus wie die Lösungen funktionieren. Hier ist der Fehler, den ich bekomme. Ich habe meine RxJava-Implementierung unter newThread() und den Observer unter mainThread().Asynchrone RxJava Subscription wirft immer noch NetworkOnMainThreadException

Also meine erste Observable emittiert ein Observable>. Ich wiederhole es mit flatMapObservable und verwende jede ganze Zahl, um einzelne Nachrichten als Observable zu erhalten.

Blick auf meine Http Log Ich bekomme die Liste der ganzen Zahlen und die erste Nachricht. Dann bekomme ich einen Fehler.

Jede Hilfe würde sehr geschätzt werden.

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)

+0

Wird 'getHackerNewsItem (id)' auf dem Hauptthread ausgeführt? –

Antwort

1

Alles nach observeOn(AndroidSchedulers.mainThread()) auf dem Haupt-Thread ausgeführt wird. Ich nehme an, dass mMainProvider.getHackerNewsItem ein Netzwerkanruf ist, also sollten Sie die observeOn Zeile direkt vor dem subscribe verschieben.

+1

Diese eine Information hat mich gerettet. Vielen Dank! – androidtitan

Verwandte Themen