Android和RESTful服务

rob*_*es3 5 rest post android android-contentprovider

我正在尝试实现一个应用程序来使用RESTful Web服务.我研究了几个不同的例子,编写了一个很好的工作应用程序,可以成功地从REST服务中获取.但现在我需要一些方向.这是一些基本的背景(非常简化)......

  • 假设具有"GetReferrers"和"AddReferrer"方法的基本REST服务.
  • Activity,我称之为managedQuery得到一个Cursor从后面ContentProvider给我ListView.
  • ContentProvider返回任何本地数据,并调用一个异步"GetReferrers"获得引荐的最新服务器列表.
  • 我有一个自定义ResponseHandler来解析JSON并将其插入到ContentProvider.
  • 截至目前,我正在ContentProvider从服务器成功"获取"后删除本地的所有记录,然后将新的/更新的列表插入数据库.

我有两个问题......

  1. 当我进行新的GET时,通常的做法是删除本地的所有现有记录ContentProvider并插入新列表吗?或者更好(虽然更耗时)分别对新/已更改/已删除的记录进行检查以仅添加/更改/删除?

  2. 我真的不知道从哪里开始从客户端进行"添加"以利用"AddReferrer"REST方法.我知道如何在本地添加一个新的项目,以ContentProvider使用ContentValues同一个getContentResolver().insert().但是,我会把代码放在哪里推送到服务器?或者更常见的做法是跳过添加到本地ContentProvider,将其推送到服务器,然后让GET将其拉回本地ContentProvider

希望一切都有道理.我很欣赏你能给出的任何方向.如果有人知道这样一个好的双向例子,请分享.到目前为止,我发现的REST客户端操作的所有示例都只是从服务器"获取"而不是重新启动.

jed*_*rik 2

  1. 当我必须做这样的事情时,我可以实现一个 REST 方法getReferrersSince(timestamp),比如 ,它只给我自上次同步以来的更改。但如果服务不在您的控制之下,我也会建议第一个选择。检查每个条目是否发生更改可能需要与删除并重新插入所有条目一样长的时间,但更有可能不一致。
    顺便说一句:丹尼尔·泰蒂是对的。所以它实际上是这样的
    GET http://.../referrers?since=[timestamp]

  2. 只是为了确定:你看过Virgil Doobjanschi吗?他建议首先在本地插入这些项目,然后在额外的数据库列中将它们标记为“待处理”(例如SYNC_STATUS)。然后有一个服务在后台通过 REST 上传所有待处理项目并将它们标记为“已同步”。