Android - 使用GCM更新客户端的sqlite数据库

时间:2013-12-14 06:04:43

标签: android android-sqlite google-cloud-messaging

我正在使用SQLite数据库开发一个Android应用程序。我想实现以下功能:

  • 当有新数据可用时,客户的应用程序会自动将新数据下载到sqlite数据库。

enter image description here

我阅读了很多相关帖子,很多人建议GCM是通过创建GCM服务器向客户端设备发送通知来实现此类功能的最佳方法。例如,this tutorial

但是,它只显示客户端应用程序上GCM服务器发送的消息。为了从服务器更新客户端的sqlite数据库,GCM服务器应该发送什么? (发送sql update命令?)

先谢谢!

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

修改

我现阶段所知道的事情: GCM服务器通知客户端有新的更新,然后客户端调用Web服务来获取数据并插入其sqlite数据库。

问题:编写此类Web服务的方法是什么?如何将客户端应用程序的数据库与我的服务器同步?

2 个答案:

答案 0 :(得分:2)

GCM服务器不负责更新你的数据库,你可以用它来亲密你的应用程序,哟!我的服务器上有新的东西要更新,让我们连接和下载新数据。它可以节省大量的设备电池,而这些电池会在内部某个定义的时间内汇集您的服务器,以检查更新的可用性。

您可以指定要从GCM发送到您的应用的json消息的键值,例如
     {        “身份”:“newupdate”      }

并且在GCMReceiver的onMessage()中,您可以通过关键“status”从intent获取消息并写入逻辑,如

if(message.equalsIgnoreCase("newupdate"){

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

}

如果您是Sqlite数据库的新手,请参阅本教程 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);

根据你的编辑,我添加几点:

  1. 同步意味着保持两个数据相同,为此,您必须创建一个Web服务,它将从您的数据库中获取数据(为数据库中插入的每个数据添加时间戳并将其与数据一起发送你发送到设备)。

  2. 同步数据从设备sqlite数据库中获取时间戳的最大值,并在从设备点击Web服务时作为参数发送,并在服务器响应中发送数据,这些数据在该特定信息之后添加或更新请求中收到的时间戳。

  3. 因此,即使用户删除了您的应用程序,您也无法获得请求时间戳,也无需发送整个数据。

答案 1 :(得分:0)

发送sql update命令?

不,你应该发送Json数据,形成你的服务器,并在你onMessage()的{​​{1}}中获得相同的json数据。将此json数据解析为某个对象并执行插入查询..