2016-08-05 8 views
0

그래서 여기에 대한 다른 답변을 살펴본 후 같은 질문을 해결하면 솔루션이 작동하지 않는 것처럼 보입니다. 여기에 내가 얻는 오류가있다. newThread()에 내 RxJava 구현이 있고 mainThread()에 옵저버가 있습니다.비동기 RxJava 구독 여전히 여전히 NetworkOnMainThreadException을 던졌습니다.

그래서 내 첫 번째 관찰 가능이 Observable>을 방출합니다. 난 flatMapObservable을 사용하여 그것을 반복하고 Observable로 단일 뉴스 항목을 얻으려면 각 정수를 사용하고 있습니다.

내 HTTP 로그를 보면 정수 및 첫 번째 뉴스 항목이 나타납니다. 그런 다음 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

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)

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

+0

메인 스레드에서'getHackerNewsItem (id)'이 실행 중입니까? –

답변

1

observeOn(AndroidSchedulers.mainThread())는 주 스레드에서 실행 한 후 모든. mMainProvider.getHackerNewsItem은 네트워크 호출이므로 subscribe 바로 앞에 observeOn 행을 이동해야합니다.

+1

정보 하나가 저를 구해 줬습니다. 고맙습니다! – androidtitan