Android - Автономный режим - Синхронизация данных - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над приложением для Android, которое является драйвером.Основным приложением драйвера является доставка заказов для конкретного клиента.

Водитель получит большую часть заказов, и он может изменить статус каждого из них, например (in_transit, в ожидании, доставлено, отменено).отклонено).Как только интернет-соединение обрывается, драйвер блокируется от любых действий.

Моя цель - как заставить приложение работать в автономном режиме, когда интернет-соединение разорвано, драйвер все еще может выполнять действие каждогопорядок, и он может изменить статус локально для каждого с нового на in_transit доставить и так один.И как только интернет-соединение восстановится, я могу синхронизировать / отправить данные на сервер.

Итак, мои вопросы: - Как я могу это сделать?- Что мне сохранить, чтобы синхронизировать запросы API или статус заказа?

Спасибо,

Ответы [ 5 ]

0 голосов
/ 26 апреля 2018

Сначала получить все заказы с сервера и сохранить в локальной базе данных для локальной базы данных, используя SQLite

Драйвер обновляет статус локально, т.е. в локальной базе данных SQLite.

Использование фоновой службы для проверки интернет-соединениядоступно каждые 15 минут.

Создайте одну таблицу состояния в локальной базе данных, если доступно подключение к Интернету, отправьте данные на сервер и измените состояние в локальной созданной таблице как истинное, по умолчанию оно ложно

В следующий раз при отправке только данные имеют статус false в локальной базе данных.

0 голосов
/ 26 апреля 2018

Вы можете выполнить следующие шаги в своем приложении:

  1. Создать локальную базу данных со схемой, которая содержит информацию об остановках и элементах.
  2. В начале, когдаводитель начинает свое путешествие, он должен иметь Интернет.Получить всю информацию о доставке и сохранить ее в локальной базе данных для использования.
  3. Показать этот список для драйвера из локальной базы данных.
  4. Вы можете назвать 2 Flags delivery_status и синхронизированы .Первоначально, delivery_status может иметь значение in_transit , а флаг синхронизации должен иметь значение false .
  5. Создать фоновую службу, которая будет проверять подключение к Интернету через определенный интервал.Если нет интернета, сервис останавливается и ничего не происходит.Но если есть Интернет, извлеките все несинхронизированные ** (synced = false) ** данные из локальной базы данных и отправьте данные на сервер.После успешного ответа от сервера пометьте этот синхронизированный флаг как true.Повторите этот шаг через каждый определенный интервал для проверки несинхронизированных данных и продолжайте отправлять их на веб-сервер до тех пор, пока все синхронизированные флаги не станут истинными.

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

0 голосов
/ 26 апреля 2018

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

0 голосов
/ 26 апреля 2018

Вы также можете использовать База дивана дБ. синхронизировать данные с сервером через синхронизирующий шлюз

0 голосов
/ 26 апреля 2018

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

Ваше первое решение - какое поведение вы хотите, если приложение закрыто,Если вы хотите сохранить его, даже если пользователь закроет приложение, вам нужно будет записать эти данные на диск.Вы можете сделать это, записав в файл (с помощью json), сохранив данные в SharedPreferences (если у вас есть только небольшой объем данных), или используя базу данных.Базы данных являются наиболее распространенным подходом, если у вас будет много данных.

Что касается баз данных, Android изначально поддерживает SQL lite , но это может быть сложно для новичка.Я бы посоветовал взглянуть на Realm , который я считаю очень интуитивно понятным в использовании.

Если вы не возражаете против того, что данные будут забыты, если пользователь закроет приложение, вы можете просто поместить данные в одну из многочисленных коллекций Java , например ArrayList,LinkedList или Stack до восстановления соединения.Однако, как я уже сказал, вы рискуете потерять эти данные, если приложение будет закрыто до отправки данных.

...