Автономный режим приложения Android, синхронизация локальной базы данных sqlite с удаленной базой данных

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

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

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


person Simo    schedule 28.03.2013    source источник
comment
вы можете попробовать использовать SyncAdapter developers.androidcn.com/resources/samples/SampleSyncAdapter /   -  person minhaz    schedule 28.03.2013
comment
Обратите внимание, что нет простого решения, если данные могут быть изменены в обеих базах данных, когда они отключены. Что делать при возникновении конфликта, может решить только приложение (или пользователь).   -  person Richard Huxton    schedule 28.03.2013
comment
@minhaz Я немного узнал о SyncAdapter, но не уверен, что это поможет мне в том, что я хочу сделать. Например, мое приложение может быть отключено несколько дней, и оно должно позволить пользователю нормально работать с локальными данными без веб-доступа. Как только устройство снова получит доступ к Интернету, мне нужно обновить/удалить/создать элементы базы данных, которые были изменены во время автономный режим   -  person Simo    schedule 29.03.2013
comment
Прямо сейчас у вас есть две проблемы: одна — заставить ваше приложение работать в автономном режиме, а вторая — синхронизировать базу данных с облаком. лучше решать одну проблему за раз. Вы должны отслеживать все сохраненные и завершенные работы, используя некоторый временный кеш, и когда ваш пользователь подключается к Интернету, обрабатывайте их один за другим.   -  person minhaz    schedule 29.03.2013


Ответы (1)


Вот некоторые очень основные мысли по этому поводу.

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

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

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

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

person Chris Travers    schedule 12.05.2013
comment
Спасибо за ваш ответ, я хотел знать, есть ли чудодейственный инструмент для этого, но теперь я почти уверен, что этого волшебства еще не существует. - person Simo; 13.05.2013
comment
Я не уверен, что волшебство действительно возможно, если вам нужно выполнить двустороннюю синхронизацию. Есть несколько подходов к разрешению конфликтов, но один подход для всех здесь невозможен. Для односторонней синхронизации это вполне возможно, но мне трудно понять, почему веб-служба, которую вы уже создаете, не будет лучше..... - person Chris Travers; 13.05.2013
comment
Волшебное средство для решения этой проблемы, кажется, существует только для iOS от Telerik на данный момент. только для iOS и, согласно их веб-сайту, скоро он будет доступен для устройств Android. - person Narayanan; 22.12.2014