gpt4 book ai didi

android - 同步 Android 客户端和 REST 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:55 25 4
gpt4 key购买 nike

REST 服务器

我创建了一个包含 :users 和关联的 :comments 的 Rails 服务器。它用作 Android 客户端的后端 API。在服务器上加载和存储数据的交换格式是 JSON。这是相关的迁移。

class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end

...

class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.references :users
t.string :subject
t.text :message
t.timestamps
end
end
end

所有用户都已导入。因此,只为 :users 资源配置了读取权限。因此,对于 :comments 应该可以添加新条目。以下是可用路线。

   user_comments GET   /users/:user_id/comments(.:format)      comments#index
POST /users/:user_id/comments(.:format) comments#create
new_user_comment GET /users/:user_id/comments/new(.:format) comments#new
user_comment GET /users/:user_id/comments/:id(.:format) comments#show
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show

安卓客户端

在客户端,我使用带有AsyncTasksService 来下载、解析用户并将其存储到本地SQLite 数据库中。 ContentProvider 将缓存的用户传送到 UI。从服务器下载的用户对象包含users 表的唯一标识。当在客户端创建新评论时,这应该很有用。

场景一:阅读评论

  • 用户显示在 Android 客户端的 ListView 中。
  • 用户项目被选中。
  • 列表 Activity 创建一个包含用户特定 URI 的 Intent,例如content://com.example.myapp.provider/users/23
  • 用户 Activity 显示有关用户和相关评论的详细信息。
  • 缓存的评论通过 CursorLoader 加载。 (1)
  • 同步过程从远程服务器加载评论。 (2)

场景二:写评论

  • 可以根据用户 Activity 创建评论。
  • 评论被存储到本地数据库中。 (3)
  • 存储的评论与远程服务器同步。 (2)

头痛问题

我标记了与以下问题相关的场景步骤。

  1. 如何为用户 Activity 中使用 CursorLoader 的评论创建内容 URI?请注意,此时我只知道用户 URI。
  2. 有人可以描述我如何创建同步过程吗?我不确定 SyncAdapter 是否在这里工作(从未使用过)。同步过程是否只是一个服务,它一方面启动任务在客户端下载、解析和存储评论,另一方面加载、编码评论并将评论发送到服务器?<
  3. 新评论的内容 URI 是什么样子的?评论的 ContentProvider 和用户的一样吗?应用程序中是否只有一个SQLiteOpenHelper

我遇到的主要问题是如何设计应用程序?如果您知道我应该如何同步用户及其相关评论的更好解决方案,非常欢迎您。

答案

问题 1. 和 3. 的答案
我按如下方式扩展了 REST 模型:为评论 返回的 JSON 散列现在包括相关用户id用户 的 JSON 散列中也包含相同的 id。这两个对象都存储在 Android 设备上的本地数据库中。这允许我为特定用户请求评论。我只是将 服务器用户 ID 作为 WHERE 子句传递。 comments 的内容 URI 并未像我在问题中暗示的那样级联。它类似于用户 内容 URI:

content://com.example.myapp.provider.commentsprovider/comments

请注意,我更改了字符串的 authority 部分。我决定创建 separate content provider对于用户评论

最佳答案

一个简单的架构是总是首先更新服务器中的内容,立即将发布的评论发送到服务器,然后从那里通过 GCM 推送通知。给应该请求更新评论列表的用户。流程如下所示:

  • 当应用程序打开时,将 GCM 注册 ID 发送到您的推送通知服务器(比如 uniqush-push ,或者您自己的服务器使用 gem to handle the GCM logic ),这样您就可以使用它向用户发送推送通知,告诉应用程序从服务器更新评论
  • 根据需要构建初始缓存
  • 每当用户发表评论时,将其发送到服务器并让服务器响应所创建评论的数据,以便应用程序可以使用它并根据需要使用返回的 ID 和其他任何内容缓存它
  • 在服务器上,当发表评论时,遍历所有相关用户并使用 GCM 注册 ID 向其发送推送通知,它可以像 "update_comments": "1"
  • 当用户点击推送通知时,在应用程序上,通过向服务器发出请求来更新评论缓存

关于android - 同步 Android 客户端和 REST 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com