2013-12-14 61 views
0

我正在使用SQLite数据库的Android应用程序。我想实现以下功能:Android - 使用GCM更新客户端的sqlite数据库

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

enter image description here

我读了很多的相关的帖子,很多人建议GCM是通过创建一个GCM服务器发送通知给客户的设备做这样功能的最佳方法。例如,this tutorial

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

感谢高级!

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

编辑:

我知道在这个阶段什么: GCM服务器通知客户端有新的更新,则客户端调用Web服务来获取数据并插入其sqlite数据库。

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

回答

2

GCM服务器不负责更新你的数据库,你可以用它来亲密你的应用程序,哟!我的服务器上有一些新的更新,让我们连接并下载新的数据。它可以节省大量的设备电池,而这些电池设备会在为了检查更新的可用性而在内部定义的时间内共享服务器时浪费。

您可以指定一个JSON的消息,你是从GCM发送到您的应用程式,例如
键值:)GCMReceiver的

和的onMessage(你可以{ “状态”,“newupdate” }从意图通过关键的“地位”得到的消息,写逻辑像

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服务时作为参数发送,并且在该特定时间之后添加或更新的服务器响应中发送数据在请求中收到的邮票。

所以,即使用户删除了你的应用程序,你也不会在请求时间中得到任何东西,而是发送整个数据。

+0

你的意思是我应该创建一个提供json数据的RESTful服务?如果是这样,假设有两个新记录可用,我将它添加到我的服务器数据库中,但该服务应该如何返回这两条记录? (在表中定义一列来标识“这是新的”)? – user2761885

+0

在宁静的服务中,您可以决定使用哪种格式,它可以是xml,json或简单的字符串,以方便您使用。是GCM推送消息中的JSON,以便在需要来自GCM的多个通知时识别该消息。直到4KB的数据可以通过GCM消息本身在有效载荷中传递,但是如果您有更大的数据,请创建一个Restful Webservice并告诉您应用程序使用该数据下载数据。 – pyus13

+0

检查我的编辑是否回答您所编辑的问题。 – pyus13

0

发送一个sql更新命令?

不,您应该发送Json数据,形成您的服务器,并在GCMIntentRecieveronMessage()中获得相同的json数据。解析这个json数据到一些对象并执行插入查询..