Course Content
-
Подготовка
-
Учимся работать с Retrofit и GSON
-
Всё вместе. Создание UI и отображение ответа от сервера
-
Использование RxJava 2.0 для создания вызовов В этом разделе вы научитесь использовать RxJava 2.0 для создания вызовов к серверу и получения ответа
Описание моделей для обработки результата запроса
В данном уроке мы опишем модель ответа метода top_rated для обработки результата
Создание модели MoviesResponse
Чтобы создать класс, описывающий ответ от сервера, необходимо взглянуть на json ответа.
В ответе от сервера находятся поля и данные фильмов. Давайте рассмотрим чуть более подробно
- Фигурными скобками обозначается начало объекта. Таким образом это будет базовая модель MoviesResponse
- Поля ответа, могут быть как примитивными типами (String, int, long, boolean) так и более сложными объектами или списками
- Квадратными скобками обозначается начало списка, то есть это может быть какая-нибудь коллекция, например ArrayList
- Один объект из списка, который в свою очередь состоит из полей и списков других объектов
Пример ответа и типы полей вы можете взять из документации 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, можем создать 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