Android MVP лучший способ обрабатывать представления с помощью вызова API

У меня возник вопрос о том, как обновить представление или выполнить переход фрагмента, когда представление переходит в фоновый режим, а ответ API поступает в виде обратного вызова.

Например, у меня есть loginfragment. Пользователь нажимает кнопку входа в систему, и ведущий берет ее и дает Interactor, где у меня есть наблюдатель Rx, который общается с репозиторием, моделью и так далее. Ответ приходит через 3-5 секунд. В это время я нажимаю кнопку «Домой», и мое приложение переходит в фоновый режим. Докладчик получает ответ от обратного вызова Interactor и теперь хочет обновить представление, но представление находится в фоновом режиме.

При успешном входе в систему я хочу сделать переход фрагмента и перейти к фрагменту B. Но мое представление находится в фоновом режиме. Поэтому, когда я возвращаю свое приложение на передний план, я все еще вижу экран входа в систему, хотя я уже получил ответ API об успешном входе в систему.

Как мне обрабатывать обновления представления или переход фрагмента, когда представление переходит в фоновый режим, и как лучше всего это сделать?

Может быть, вы можете сохранить токен локально после входа в систему, чтобы, когда вы переводите приложение на передний план, вы могли проверить, что вы уже прошли аутентификацию, и выполнить переход этого фрагмента.

Wang 03.02.2019 21:40

Это для входа в систему... но как насчет других вызовов API? Например, с кодом успеха http 204 (без контента)? Должен ли я сохранять каждый http-ответ локально?

Alessandra Maria 03.02.2019 21:59

На самом деле, даже не имея контента, вы все равно сможете узнать, удался вызов или нет. Таким образом, цель состоит в том, чтобы сохранить все, что может помочь вам узнать последнее состояние вашего сетевого запроса, чтобы знать, что отображать/изменять в вашем пользовательском интерфейсе, когда вы вернетесь в приложение. Для запроса, отвечающего 204, использование простого логического значения может выполнить задание или поставить действие в очередь для выполнения позже. Это широкий вопрос, на который нужно ответить, так как каждый отдельный запрос будет иметь другой результат.

Wang 04.02.2019 22:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
362
1

Ответы 1

Одним из подходов является архитектура Model-View-Intent в Мосби, в которой презентатор сохраняет последнее состояние представления, а представление подписывается на ViewState Observable для обновления. При таком подходе представление может подписаться в onStart(), когда безопасно совершать фрагментные транзакции.

Другой возможный подход заключается в том, что каждое представление имеет состояние (ViewState), которое содержит очередь команд для представления. Если представление готово (уже был вызван onStart()), то команда передается ему немедленно, иначе сохраняется в очередь и откладывается до готовности представления. Посмотрите, как это реализовано в Мокси.

Другие вопросы по теме