NetworkOnMainThreadException with RxJava 2 + Retrofit 1.9

Viewed 807

I'm working on a large codebase with a lot of network calls. It currently works with Retrofit 1.9 and RxJava 1.x. But, we're trying to go to RxJava 2.x.

I currently keep getting a NetworkOnMainThreadException on our RxJava 2 code. I'm using RxJava 2.x and Retrofit 1.9. The plan is to go to Retrofit 2.x later. But, for now, we need to make this work with RxJava 2 + Retrofit 1.9.

The code in question is:

observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<Void>() {
    @Override
    public void onNext(Void response) {
        if (listener != null) {
            listener.onSuccess(response);
        }   
    }   

    @Override
    public void onError(Throwable e) {
        if (listener != null) {
            listener.onError(e);
        }   
    }   

    @Override
    public void onComplete() {
        //do nothing for now 
    }   
}); 

Any ideas how the network operation is ending up on the UI thread when I told it to subscribeOn(Schedulers.io())?

Edit: by request here's the stacktrace. I genericized filenames and such because I'm not allowed to divulge those details...

    retrofit.RetrofitError
     at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:400)
     at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
     at java.lang.reflect.Proxy.invoke(Proxy.java:913)
     at <package-name>.network.api.$Proxy40.someApiMethod(Unknown Source)
     at <package-name>.SomeApi.someApiMethod(SomeApi.java:30)
Caused by: android.os.NetworkOnMainThreadException
     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1425)
     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
     at java.net.InetAddress.getAllByName(InetAddress.java:787)
     at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
     at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:224)
     at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:193)
     at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:113)
     at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
     at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:329)
     at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319)
     at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
     at com.squareup.okhttp.Call.getResponse(Call.java:271)
     at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:228)
     at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199)
     at com.squareup.okhttp.Call.execute(Call.java:79)
     at retrofit.client.OkClient.execute(OkClient.java:53)
0 Answers
Related