fbpx

Course Content

Total learning: 10 lessons Time: 2 hours

Описание моделей для обработки результата запроса

В данном уроке мы опишем модель ответа метода top_rated для обработки результата

Создание модели MoviesResponse

Чтобы создать класс, описывающий ответ от сервера, необходимо взглянуть на json ответа.

Json ответа от сервера

В ответе от сервера находятся поля и данные фильмов. Давайте рассмотрим чуть более подробно

  1. Фигурными скобками обозначается начало объекта. Таким образом это будет базовая модель MoviesResponse
  2. Поля ответа, могут быть как примитивными типами (String, int, long, boolean) так и более сложными объектами или списками
  3. Квадратными скобками обозначается начало списка, то есть это  может быть какая-нибудь коллекция, например ArrayList
  4. Один объект из списка, который в свою очередь состоит из полей и списков других объектов

Пример ответа и типы полей вы можете взять из документации API

Пример ответа

Теперь, когда мы знаем, как выглядит ответ от сервера, необходимо описать модель ответа в виде data класса. У нас будет 2 класса. Первый – это обёртка всего ответа от сервера MoviesResponse

data class MoviesResponse (
    var page: Int,
    var results: List<Movie>,
    var totalResults: Int,
    var totalPages: Int
)

Использование аннотации @SerializedName

Если внимательно посмотреть на json ответа от сервера и название полей – то вы увидите, что они отличаются. Например total_results в json и totalResults в модели. Для того, чтобы GSON мог правильно обработать результат ответа от сервера и наши значения не потерялись, в случае если название поля в модели и название параметра отличаются – необходимо использовать аннотацию @SerializedName

data class MoviesResponse (
    var page: Int,
    var results: List<Movie>,
    @SerializedName("total_results")
    var totalResults: Int,
    @SerializedName("total_pages")
    var totalPages: Int
)

Создание модели Movie

Поле results представляет собой массив объектов типа Movie

Json объектов из массива results

Зная json, можем создать data класс, который описывает нашу модель

class Movie(
    posterPath: String,
    @SerializedName("adult")
    var isAdult: Boolean,
    @SerializedName("overview")
    var overview: String?,
    @SerializedName("release_date")
    var releaseDate: String?,
    genreIds: List<Int>,
    @SerializedName("id")
    var id: Int?,
    @SerializedName("original_title")
    var originalTitle: String?,
    @SerializedName("original_language")
    var originalLanguage: String?,
    @SerializedName("title")
    var title: String?,
    @SerializedName("backdrop_path")
    var backdropPath: String?,
    @SerializedName("popularity")
    var popularity: Double?,
    @SerializedName("vote_count")
    var voteCount: Int?,
    @SerializedName("video")
    var video: Boolean?,
    @SerializedName("vote_average")
    var voteAverage: Double?
) {
    @SerializedName("poster_path")
    var posterPath: String? = null
        get() = "https://image.tmdb.org/t/p/w500$field"
}

Описанные модели будут использоваться для получения списка популярных фильмов, которые вернёт метод top_rated. В следующем уроке мы создадим Retrofit клиент для вызова методов API