2015-11-02 4 views
4

Я создаю приложение для Android, которое включает в себя данные о листинге продукта. Эти продукты будут составлять от 500 до 1000 единиц и развиваться со временем, с изменениями от серверного сервера.Как синхронизировать данные сервера в приложении Android?

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

Для сохранения данных я изучил следующие способы.

  1. Native SQLite (синхронизация с помощью синхронизации рамки адаптера)
  2. Realm (не мог понять, как синхронизировать)
  3. Couchbase облегченный (имеет собственный шлюз синхронизации)

Но все же не мог» t прийти к какому-либо выводу для наилучшего возможного подхода.

Поскольку данные большие, и нам нужно иметь автономный доступ к данным через приложение, синхронизация данных становится очень важной. Я все еще изучаю эти вещи.

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

EDIT:

Хотя существуют разные точки зрения или несколько способов для проектирования синхронизации данных в приложение для Android, хочу понять несколько вещей:

  1. Варианты хранения
    а. Хранение в базе данных sqlite или NoSQL, таких как Realm, CouchDB Lite?

  2. Параметры синхронизации
    a. Для синхронизации нужно ли иметь структуру sqlite db, чтобы она была такой же, как и db сервера?
    b. Можно ли комбинировать Realm с адаптером Sync или у Realm есть другие возможности синхронизации?

  3. Проект базы данных
    a. Поскольку каждый элемент продукта имеет дополнительную информацию для отображения при нажатии на них, необходимо указать данные о товаре с другим вызовом API или всеми этими деталями, которые будут включены в первоначальный вызов API? каков подход к дизайну?

+0

Посмотрите на этот смежный вопрос. Все, что вам нужно, есть. Пожалуйста, прочитайте все ответы: http://stackoverflow.com/questions/10829371/sync-data-between-android-app-and-webserver?rq=1 – narko

ответ

1

Вы можете использовать опцию Native sqlite (синхронизация с использованием инфраструктуры адаптера Sync). Согласно вашему требованию, я думаю, вам понадобится учетная запись, а также список продуктов, чтобы Sync Adapater также позаботился об аутентификации. вы можете проверить http://developer.android.com/training/sync-adapters/creating-sync-adapter.html для получения более подробной информации о том же.

поэтому подход может быть 1) когда вы запустите приложение, проверьте, была ли создана учетная запись для вашего приложения, а если нет, создайте новую учетную запись и настройте периодическую синхронизацию для запуска. 2) После синхронизации он будет хранить данные в базе данных sqlite. 3) Используя cursorLoader, вы получите данные из sqlite и отобразите их в пользовательском интерфейсе.

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

Еще один важный момент, который я чувствую, не извлекает все данные с сервера, как вы упомянули, может быть 500-1000 и более продуктов, так как всегда бывает, что пользователь не может просматривать все продукты и получать такие большой объем данных сосетят больше байтов данных из пакета пользовательских данных, который, очевидно, он никогда не хочет в то же время, часто делая сетевой запрос, никогда не позволит пользовательскому устройству переходить в режим StandBy, и аккумулятор устройства будет истощаться по существу, как и для каждого сетевой вызов, это заставляет устройство работать примерно на полминуты.

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

P.s при создании экземпляра адаптера 0 для атрибута flags, поэтому загрузчик будет нести ответственность за требование вашей БД, если данные изменили init.

Надеюсь, это поможет вам решить дальнейшие шаги.

Cheers.

2

Поскольку данные большие, и нам необходим автономный доступ к данным через приложение, синхронизация данных становится очень важной. Я все еще изучаю эти вещи.

Так что моя мысль об этой проблеме заключается в использовании Google Cloud Messaging, как сервер будет посылать сигнал (если есть изменения в базе данных сервера) для всех клиентских приложений, чтобы обновить свою локальную базу данных.

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

Поэтому, когда есть запись обновления или нового продукта, сервер отправляет push-сообщение всем клиентам, сообщающим им, что новый продукт добавлен на сервер (вы можете отправить данные с максимальным объемом 4 КБ клиенту, и в этом случае вам следует отправить свое product id)

Затем вы можете получать данные с сервера (по идентификатору продукта) и обновлять клиентскую локальную базу данных.

https://developers.google.com/cloud-messaging/

Для базы данных смотрите по этой ссылке: -

Should I use sqlite?

+0

Спасибо Jamil. Да, для информирования клиентов о новых данных, доступных на сервере, GCM является подходящим способом. Но можете ли вы помочь мне выбрать локальные параметры хранения db среди sqlite, realm и couchbase lite? –

+0

Я предпочитаю SQLite. Смотрите мой обновленный ответ.вы можете найти факты, преимущества и недостатки SQLite. – Jamil

0

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

https://www.firebase.com/docs/android/guide/offline-capabilities.html

Смежные вопросы