Задать вопрос

Не понимаю как именно Retrofit парсит json с GSON и как с этим работать?

Вот что я нагуглил про получению json данных по api(немного псевдокод)

//тут как-бы ясно
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://site/api")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    //в api уже реализованный retrofit-ом метод из интерфеса
    DataInterface api = retrofit.create(DataInterface.class);

    //не совсем понял
    Call<List<MyModel>> call = api.getData();

    //это ок. обработка данных в новом потоке
    call.enqueue(new Callback<List<MyModel>>() {
        @Override
        public void onResponse(Call<List<MyModel>> call, Response<List<MyModel>> response) {
            //если я правильно понял, тут приходит список объектов MyModel
            //уже заполненный данными??? каким образом?
        }

        @Override
        public void onFailure(Call<List<MyModel>> call, Throwable t) {
            //обработка ошибки
        }
    });

А вот и DataInterface

public interface DataInterface {
        @GET("apiUri")
        Call<List<MyModel>> getData();
    }

Насколько я понял MyModel это POJO, но в примерах этот объект имел только приватные свойства и геттеры. Тогда что приходит в onResponse?

Помогите пожалуйста понять всю эту магию и как с этим работать. Спасибо.
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Средний Комментировать
Ответ пользователя Никита К ответам на вопрос (2)
@snitron
Учуcь программировать на Android, IOS и Unity.
При созднии объекта Retrofit Вы добавили конвертер для десериализации приходящих данных (в данном случае Gson). Этот конвертер реализуется через GsonConverterFactory.
.addConverterFactory(GsonConverterFactory.create())

В интерфейсе API Вы указали тип приходящих данных, завёрнутый в объект вызова Retrofit (Call):

Call<List<MyModel>> getData();

В итоге в метод onResponse() придёт List уже распарсенных данных (MyModel). Именно конвертер, который вы указали (Gson), по приходу данных десереализовал их в объекты того типа, которого Вы указали в интерфейсе API.
Ответ написан
Комментировать