Я использую 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();
}
Когда я пытаюсь запустить этот код, я получаю эту ошибку:
Я думал, что Retrofit автоматически выполняет работу в фоновом потоке. Или я что-то неправильно понял. Что не так в этой ситуации и как ее решить?
Я думал, что Retrofit автоматически выполняет работу в фоновом потоке.