2013-03-28 5 views
6

У меня есть postgreSql базы данных, который управляется приложением Android через веб-службы. Я хотел бы знать, что является лучшим способом сделать в автономном режиме для моего приложения.андроид приложение автономный режим, локальная база данных синхронизации базы данных с удаленной базой данных

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

Я хотел бы знать, если есть существующий инструмент, который делает синхронизации проще с существующая база данных postgres, когда устройство имеет доступ к сети

+0

вы можете попробовать использовать SyncAdapter http://developers.androidcn.com/resources/samples/SampleSyncAdapter/index.html – minhaz

+3

Обратите внимание, что нет простого решения, если данные могут быть изменены в обеих базах данных при их отключении. Что делать, когда есть конфликт - это то, что может быть определено только приложением (или пользователем). –

+0

@minhaz Я немного узнал о SyncAdapter, но я не уверен, что это может быть полезно для того, что я хочу сделать. Например, мое приложение может быть в автономном режиме через несколько дней, и оно должно позволить пользователю работать «нормально» с использованием локальных данных без веб-доступа. После того, как устройство снова получит доступ к Интернету, мне нужно обновить/удалить/создать в базе данных элементы, которые были изменены в автономном режиме – Simo

ответ

4

Вот несколько основных мыслей об этом.

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

Если вы идете с чем-то подобным, вы, вероятно, действительно не хотите подходить к sqlite как rdbms. Вероятно, вам нужна широкая структура таблиц, предназначенная в основном для хранения ожидающих заявок, или что-то, что будет хранить такие вещи, как json-файлы, которые вы отправите позже. Это означает, что ваш локальный db будет создан не вокруг вашей модели данных, а вокруг вашего API веб-сервисов.

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

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

+0

Спасибо за ваш ответ, я хотел знать, есть ли чудесный инструмент для этого, но теперь я почти уверен, что эта «магия» еще не существует. – Simo

+0

Я не уверен, что «волшебство» действительно возможно, если вам нужно выполнить двухстороннюю синхронизацию. Есть несколько подходов к разрешению конфликтов, но один размер подходит для всех на самом деле. Для односторонней синхронизации это возможно, но у меня возникли проблемы с тем, почему веб-сервис, который вы уже строите, не будет лучше ..... –

+0

Волшебная пуля для этой проблемы, похоже, существует только для iOS от [Telerik ] (http://www.telerik.com/datasync-beta) на данный момент, это только для iOS и по их веб-сайту, это скоро будет доступно для Android-устройств. – Narayanan