Retrofit 2.0.0-beta2 android.os.NetworkOnMainThreadException
seiton-it opened this issue · 2 comments
Hi there is some serious bug in that retrofit version.
i get exception
Failed to get trending repositories
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: android.os.NetworkOnMainThreadException
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at java.net.InetAddress.getAllByName(InetAddress.java:215)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:327)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call.getResponse(Call.java:267)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.jakewharton.u2020.data.api.LoggingInterceptor.intercept(LoggingInterceptor.java:28)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:221)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.jakewharton.u2020.data.api.oauth.OauthInterceptor.intercept(OauthInterceptor.java:25)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:221)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.squareup.okhttp.Call.execute(Call.java:79)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at retrofit.OkHttpCall.execute(OkHttpCall.java:116)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:111)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:88)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.Observable$2.call(Observable.java:162)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.Observable$2.call(Observable.java:154)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.Observable$2.call(Observable.java:162)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.Observable$2.call(Observable.java:154)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.Observable.unsafeSubscribe(Observable.java:7710)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:231)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:140)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:224)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at rx.subjects.PublishSubject.onNext(PublishSubject.java:114)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.jakewharton.u2020.ui.trending.TrendingView$5.run(TrendingView.java:182)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at android.os.Handler.handleCallback(Handler.java:739)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at android.os.Handler.dispatchMessage(Handler.java:95)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at android.os.Looper.loop(Looper.java:135)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at android.app.ActivityThread.main(ActivityThread.java:5312)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at java.lang.reflect.Method.invoke(Native Method)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at java.lang.reflect.Method.invoke(Method.java:372)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
10-12 21:29:04.583 28473-28473/com.jakewharton.u2020.internal.debug E/TrendingView: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
If i switch to retrofit 2.0.0-beta1 everything works like charm
Retrofit 2's observables execute synchronously. Use subscribeOn
to put its work on a background thread.
I observed similar behavior. I'm performing a call from main thread using the asynchronous option with enqueue().
Additionally I added this interceptor
public class MyInterceptor implements com.squareup.okhttp.Interceptor
{
@Override
public Response intercept( Chain chain ) throws IOException
{
Request request = chain.request();
Log.i( "Interceptor", "before request" );
Response response = chain.proceed( request );
Log.i( "Interceptor", "after request" );
return response;
}
}
... with this line: retrofit.client().interceptors().add( new MyInterceptor() );
I would expect the interceptor to run in an asynchronous thread, e.g. the one which is created for my asynchronous call.
With retrofit 2.0.0-beta1 my code works. However with retrofit 2.0.0-beta2 I get the NetworkOnMainThreadException exception.
Is this a bug or an intential change? How do I fix my interceptor?
Update:
this version of the interceptor works with retrofit 2.0.0-beta2 too:
public class MyInterceptor implements com.squareup.okhttp.Interceptor
{
@Override
public Response intercept( Chain chain ) throws IOException
{
Request request = chain.request();
Log.i( "Interceptor", "before request" );
return chain.proceed( request );
}
}
This allows for intercepting on the request. However, I have no idea on how to intercept on the response.