Giter Club home page Giter Club logo

homework2's Introduction

Домашнее задание №2

Цель

Написать приложение, состоящее из одного экрана со списком популярных фильмов, используя The Movie DB API https://www.themoviedb.org/. Документация по API доступна здесь: https://developers.themoviedb.org/3/getting-started. Принцип работы приложения повторяет рассмотренное на практике приложение со списков веб-камер (https://github.com/IFMO-Android-2016/practice2). Основные идеи, которые надо реализовать в этом приложении в целом повторяют идеи из практики:

  • Загрузка данных в AsyncTaskLoader
  • Отображение данных в RecycleView
  • Выполнение запроса при помощи HttpURLConnection
  • Разбор ответа от API при помощи JsonReader или JSONObject
  • Отображение процесса загрузки при помощи ProgressBar

Задание

  • Зарегистрироваться на https://www.themoviedb.org/ и получить ключ API, прописать ключ в классе TmdbApi вместо дефолтного.
  • В методе TmdbApi.getPopularMoviesRequest написать код, который создает запрос популярных фильмов, как описано в документации: https://developers.themoviedb.org/3/movies/get-popular-movies (для начала можно запрашивать только первую страницу результата). В качестве параметра запроса должен передаваться язык пользователя (системный), который можно узнать при помощи вызова Locale.getDefault().getLanguage().
  • Написать код парсера, который при помощи JSONObject или JsonReader разбирает ответ от API и возвращает результат типа List<Movie> (класс Movie уже есть в коде задания).
  • Написать класс, наследующий от AsyncTaskLoader<LoadResult<List<Movie>>>, который в фоне выполняет запрос к API и разбирает результат. Результатом загрузки должен быть объект типа LoadResult<List<Movie>>. (Классы LoadResult и Movie уже есть в коде задания).
  • Написать код и верстку основного экрана в классе PopularMoviesActivity, который:
    • При старте показывает индикатор процесса загрузки
    • После завершения загрузки показывает список фильмов в RecyclerView (нужно будет написать адаптер)
    • В случае ошибки показывает сообщение об ошибке
    • В случае отсутствия соединения показывает сообщение об отсутствии соединения

Может пригодиться

Классы из Android SDK, которые надо использовать в задании:

Для отображения изображений постеров можно использовать библиотеку Fresco (http://frescolib.org/index.html), зависимость на которую уже добавлена в код задания. Из этой библиотеки понадобится один класс SimpleDraweeView, описание здесь: http://frescolib.org/docs/getting-started.html.

Требования

  • При повороте экрана НЕ должна происходить повторная загрузка данных
  • Долгие операции НЕ должны выполняться в UI потоке
  • Во время загрузки должен показывать индикатор процесса загрузки
  • В случае ошибок или отсутсвия соединения должны показываться адекватные сообщения об ошибках
  • Приложение должно нормально выдерживать поворот экрана (с сохранением контента и без лишних действий)
  • Элемент списка фильмов должен содержать как минимум: изображение постера с правильными пропорциями, название и описание фильма на языке пользователя.
  • При необходимости верстка должна быть адаптирована к ландшафтной ориентации экрана (например, если постер в портретной ориентации может занимать всю ширину экрана, то в ландшафтной ориентации это недопустимо)

Оценка

  • 2 балла - за правильное выполнение запроса и обработку искулючений в загрузчике
  • 2 балла - за разбор ответа на запрос в формате JSON
  • 4 балла - за отображение списка фильмов
  • 2 балла - за отображение ошибок и отсуствия соединения
  • +3 балла сверх нормы - если при смене языка в системных настройках будет делаться новый запрос с другим языком и отображаться обнвленный контент с сохранением положения списка
  • +3 балла сверх нормы - если будет реализована подгрузка следующих страниц результата по мере прокрутки списка вниз

Сдавать в виде пул-реквеста, в комментарии указать имя. Если выполнены задания сверх нормы -- написать об этом в комментарии (иначе смотреть не будем).

homework2's People

Contributors

dtrounine avatar ifmo-android-2016 avatar trytest123 avatar

Watchers

Kirill Antonov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.