Android-обновление клиентской базы данных sqlite с использованием GCM

Я работаю над Android-приложением с базой данных SQLite. Я хочу реализовать следующую функцию:

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

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

Однако он просто отображает сообщение, отправленное сервером GCM в клиентское приложение. Что должен отправить сервер GCM для обновления базы данных SQL-сервера клиента с сервера? (отправить команду обновления sql?)

Заранее спасибо!

================================================== ==========

РЕДАКТИРОВАТЬ:

что я знаю на этом этапе: сервер GCM уведомляет клиентов о новом обновлении, затем клиент вызывает веб-службу для извлечения данных и вставки в свою базу данных sqlite.

Проблемы: каков подход к написанию такого веб-сервиса? как синхронизировать базу данных клиентских приложений с моим сервером?

2 ответа

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

Вы можете указать значение ключа для сообщения json, которое вы отправляете в свое приложение из GCM, например {"status": "newupdate"}

и в onMessage() GCMReceiver вы можете получить сообщение по ключевому "статусу" от логики наведения и записи, например

if(message.equalsIgnoreCase("newupdate"){

 //Call a service and download the data and store/update in your databse 

}

Пойдите для этого учебника, если вы новичок в Sqlite Database http://www.vogella.com/articles/AndroidSQLite/article.html

Чтобы обновить базу данных, учитывая, что вы уже реализовали его класс OpenHelper

MyOpenHelper myOpenHelper= new MyOpenHelper(this)
 sqltitedatabaseObject=myOpenHelper.getWritableDatabase();
 ContentValues values = new ContentValues();
 values.put(<your_column_name>,<value>);

// For Updating the Existing Entry
long rowAffected=sqltitedatabaseObject.updateWithOnConflict(<table_name>,
 values,<selection_for_update>,<selection_paramans_in_string_array>,
 0);
// For Inserting a New Row
 long rowsInserted=sqltitedatabaseObject.insert(<table_name>, null, values);
</table_name></selection_paramans_in_string_array></selection_for_update></table_name></value></your_column_name>

В соответствии с вашим Редактированием позвольте мне добавить несколько моментов:

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

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

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


отправить команду обновления sql?

Нет, вы должны отправить данные Json, сформировать свой сервер, а в onMessage() вашего GCMIntentReciever вы получите те же json-данные. Разберите эти данные json в некоторый объект и выполните запрос на вставку.

licensed under cc by-sa 3.0 with attribution.