我创建了一个包含: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
在客户端,我使用Service
和AsyncTasks
来下载,解析并将用户存储到本地SQLite数据库中。 ContentProvider
将缓存的用户提供给UI。从服务器下载的用户对象包含users
表的唯一ID。当在客户端上创建新评论时,这应该很有用。
Intent
,其中包含用户特定的URI,例如content://com.example.myapp.provider/users/23
。CursorLoader
加载。 (1)我标记了与以下问题相关的方案步骤。
CursorLoader
使用的评论创建内容URI?请注意,此时我只知道用户URI。Service
,它一方面开始下载任务,在客户端上解析和存储注释,另一方面加载,编码并向服务器发送注释?ContentProvider
是否与用户相同?应用程序中只有一个SQLiteOpenHelper
吗?我正在努力解决的主要问题是如何设计应用程序?如果您知道如何同步用户及其相关评论的更好解决方案,我们非常欢迎您。
问题1和3的答案。
我按如下方式扩展了REST模型:为注释返回的JSON哈希现在包含关联的用户的 id 。 用户的JSON哈希中也包含相同的 id 。这两个对象都存储在Android设备上的本地数据库中。这允许我为特定的用户请求评论。我只是将服务器用户ID 作为WHERE
子句传递。 评论的内容URI不是我提出的问题所隐含的级联。它类似于用户内容URI:
content://com.example.myapp.provider.commentsprovider/comments
注意,我更改了字符串的权限部分。我决定为用户和评论创建separate content provider。
答案 0 :(得分:1)
一个简单的体系结构是始终首先更新服务器中的内容,立即将发布的注释发送到服务器,然后通过GCM将通知发送给应该请求更新的注释列表的用户。流程看起来像:
"update_comments": "1"