Модификация - android.os.NetworkOnMainThreadException

Я использую Retrofit 2, чтобы получить JSON и разобрать его в POJO. Моя цель - получить одно значение этого объекта.

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

Мой клиент REST:

public interface MyClient {

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

}

Вот Я нашел отличный инструмент для создания сервиса:

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);
    }
}

Затем я создаю новый сервис, используя класс генератора услуг:

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();
        }

Когда я пытаюсь запустить этот код, я получаю эту ошибку:

android.os.NetworkOnMainThreadException в android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1147) в java.net.InetAddress.lookupHostByName (InetAddress.java:418) в java.net.InetAddress.All 252) по адресу java.net.InetAddress.getAllByName (InetAddress.java:215) по адресу: okhttp3.Dns $ 1.lookup (Dns.java:39) по адресу okhttp3.internal.http.RouteSelector.resetNextInetSocketAddress (RouteStt3o) atava .internal.http.RouteSelector.nextProxy (RouteSelector.java:139) в okhttp3.internal.http.RouteSelector.next (RouteSelector.java:81) в okhttp3.internal.http.StreamAllocation.findConnection (StreamAllocation). okhttp3.internal.http.StreamAllocation.findHealthyConnection (StreamAllocation.java:127) в okhttp3.internal.http.StreamAllocation.newStream (StreamAllocation.java:97) в okhttp3.internal.http.HttpEngine.jpg: 09: 09 в okhttp3.internal.http.HttpEngine.sendRequest (HttpEngine.java:241) в okhttp3.RealCall.getResponse (RealCall 0 с Presenters.MyPresenter.do (MyPresenter.java:30) на uz.cp.ox.activities.MyActivity.onClick (MyActivity.java:52) на android.view.View.performClick (View.java:4756) на android.view .View $ PerformClick.run (View.java:19749) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper. цикл (Looper.java:135) в android.app.ActivityThread.main (ActivityThread.java:5221) в java.lang.reflect.Method.invoke (собственный метод) в java.lang.reflect.Method.invoke (метод. Java: 372) на com.android.internal.os.ZygoteIn it $ MethodAndArgsCaller.run (ZygoteInit.java:899) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)

Я думал, что Retrofit автоматически делает работу в фоновом потоке. Или я что-то не так понял. Что не так в этой ситуации и как ее решить?

Ответы на вопрос(3)

Ваш ответ на вопрос