Retrofit - android.os.NetworkOnMainThreadException

Je suis en utilisant la Rénovation 2 pour obtenir json et de l'analyser pour POJO. Mon but est d'obtenir une valeur de cet objet.

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

Mon REPOS client:

public interface MyClient {

    @GET("/part1/part2")
    Call<MyItem> getMyItem(@Query("param1") String param1,
                                                 @Query("param2") String param2,
                                                 @Query("param3") String param3);

}

Ici J'ai trouvé un grand grand outil de création de service:

public class ServiceGenerator {

    public static final String API_BASE_URL = "http://my.api.com";

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(serviceClass);
    }
}

Alors je suis la création de nouveaux services utilisant le Service de générateur de classe:

MyClient api = ServiceGenerator.createService(MyClient.class);
        Call<MyItem> call = api.getMyItem(param1, param2, param3);
        MyItem myItem= null;
        try {
            myItem= call.execute().body();
            Log.d("MyTag", myItem.getValue());
        } catch (IOException e) {
            e.printStackTrace();
        }

Lorsque j'essaie d'exécuter ce code, j'obtiens cette erreur:

android.os.NetworkOnMainThreadException
au android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
à java.net.InetAddress.lookupHostByName(InetAddress.java:418)
à java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
à java.net.InetAddress.getAllByName(InetAddress.java:215)
au okhttp3.Dns$1.recherche Dns.java:39)
au okhttp3.interne.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:173)
au okhttp3.interne.http.RouteSelector.nextProxy(RouteSelector.java:139)
au okhttp3.interne.http.RouteSelector.prochaine(RouteSelector.java:81)
au okhttp3.interne.http.StreamAllocation.findConnection(StreamAllocation.java:174)
au okhttp3.interne.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)
au okhttp3.interne.http.StreamAllocation.newStream(StreamAllocation.java:97)
au okhttp3.interne.http.HttpEngine.connect(HttpEngine.java:289)
au okhttp3.interne.http.HttpEngine.sendRequest(HttpEngine.java:241)
au okhttp3.RealCall.getResponse(RealCall.java:240)
au okhttp3.RealCall$ApplicationInterceptorChain.procéder(RealCall.java:198)
au okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
au okhttp3.RealCall.execute(RealCall.java:57)
au retrofit2.OkHttpCall.execute(OkHttpCall.java:177)
au retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:87)
à l'uz.cp.ox.les données.MyRepository.getMyItem(MyRepository.java:31)
à l'uz.cp.ox.les présentateurs.MyPresenter.n'(MyPresenter.java:30)
à l'uz.cp.ox.les activités.MyActivity.onClick(MyActivity.java:52)
au android.vue.Vue.performClick(point de Vue.java:4756)
au android.vue.Afficher$PerformClick.exécuter(point de Vue.java:19749)
au android.os.Gestionnaire d'.handleCallback(Handler.java:739)
au android.os.Gestionnaire d'.dispatchMessage(Handler.java:95)
au android.os.Looper.boucle(Looper.java:135)
au android.app.ActivityThread.principale(ActivityThread.java:5221)
à java.lang.de réfléchir.La méthode.invoke(Native method)
à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:372)
au com.android.interne.os.ZygoteInit$MethodAndArgsCaller.exécuter(ZygoteInit.java:899)
au com.android.interne.os.ZygoteInit.principale(ZygoteInit.java:694)

J'ai pensé que la Rénovation automatiquement fait le travail dans le thread d'arrière-plan. Ou j'ai mal compris quelque chose. Ce qui est mauvais dans cette situation et comment le résoudre?

source d'informationauteur Joe Richard