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