Сохранение пользовательских данных из онлайн-сервисов для «автономного просмотра» в приложениях Android - PullRequest
5 голосов
/ 20 января 2012

У меня есть веб-сервер, на котором размещаются данные для приложения, которое я создаю на планшетах Android. Данные меняются довольно часто, но я понимаю, что планшеты и телефоны не всегда подключены к данным, и было бы хорошо, если бы пользователи уже имели доступ к данным, которые они просматривали ранее.

Я хочу, чтобы приложение получало данные с веб-сервера всякий раз, когда это возможно, а когда это невозможно, - извлекало данные с сервера SQLite (или каким-либо другим способом) на телефоне.

Есть ли уже реализация или практика для этого? Если да, то каков текущий метод реализации такой функции? И можно ли применить этот же метод для внесения изменений в данные и последующего их изменения при каждом восстановлении соединения с данными?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2012

Не уверен, что это помогает, но у меня было похожее требование, и я нашел приложение для Android под названием база данных memento, которое в основном имеет кнопку синхронизации, поэтому оно использует телефон для хранения данных, а затем синхронизируется с таблицей Google drive, вы также можете обновитьэлектронная таблица, и когда пользователь нажимает кнопку синхронизации на Android, он обновит свою локальную базу данных.Будет ли это работать для многопользовательской среды, я не очень уверен, но вы, возможно, сможете проанализировать приложение или использовать аналогичный метод?

С уважением

(PS Я ни в коем случаесвязан с приложением, которое я упомянул)

2 голосов
/ 20 января 2012

Насколько я знаю, для этого вообще нет единой основы. Здесь довольно много постов, посвященных кешированию изображений, которые можно легко адаптировать, но я ничего не знаю о полностью обобщенных или специализированных для просмотра в автономном режиме. Тем не менее, большинство решений работают только с URL-адресами и файлами, поэтому оно может работать довольно легко, если ваши данные очень просты. Это очень сильно зависит от ваших данных и того, как вы планируете их отображать. Если он состоит из веб-страниц, отображаемых в WebView, то это может раздражать, потому что тогда вам придется проходить ссылки (включая изображения, CSS, JavaScript и т. Д.) И кэшировать их. Однако, если вы работаете с конкретными изолированными URL-адресами или структурированными данными, из которых вы можете легко проанализировать все связанные URL-адреса, тогда это будет намного проще.

Вот одно из таких ориентированных на изображение решений: https://github.com/ZaBlanc/WebImageView

Общий подход довольно прост. Это может быть что-то вроде этого:

  • Каждый раз, когда вы пытаетесь «получить» URL, вы всегда читаете его из своего кэша
  • Если в вашем кеше он есть, вы можете с радостью использовать его и быть в пути
  • Если в вашем кеше его нет, вы должны поставить в очередь запрос на асинхронную загрузку файла
  • Как только загрузка файла будет завершена, отправьте какое-то уведомление, чтобы приложение сообщило, что его обработать.

Вам также приходится иметь дело с такими вещами, как политики истечения срока действия кэша и способы отображения данных, но это может быть началом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...