要成为RESTful,获取帖子评论的URI应该是这样的:
posts/#/comments
#
的帖子ID会根据您感兴趣的帖子而改变。
我想在设计内容提供商的内容URI时应用一些约定。问题是,内容提供者的用户如何以优雅的方式构建这样的URI?
可行的解决方案是:
//in PostProvider
public static URI CONTENTS_URI_POSTS = Uri.parse("content://" + AUTHORITY + "/posts");
public static String COMMENTS = "comments";
然后,用户将使用Uri.builder
合并CONTENTS_URI_POSTS
+ id
+ COMMENTS
。但是,此方法公开了有关如何构造URI的详细信息。
要隐藏详细信息,我可以添加方法:
public static URI buildContentUriToGetPostComments(int post_id);
有什么好主意吗?谢谢!
答案 0 :(得分:2)
您可以为帖子及其评论使用不同的路径:
content://<authority>/posts/#<post-id>
content://<authority>/comments/#<post-id>
这样你就有了一个看起来更传统且在内容提供者中更容易处理的URI,你不需要解析URI,但标准的UriMatcher会这样做。
答案 1 :(得分:1)
不要提出旧的东西,但我也难以实现这种一对多的关系......如果我遵循Stefans的方法:
content://<authority>/comments/#<post-id>
如果我以后想要添加URI以通过id获取特定注释,该怎么办?
content://<authority>/comments/#<comment-id>
以上内容将创建与之前URI相同的匹配。
就我而言,我尝试使用
来解决这个问题content://<authority>/posts/comments/#<post-id>
但是,此解决方案可能会导致问题。例如,如果我想使用两者加载游标:
content://<authority>/comments/ (all comments)
content://<authority>/posts/comments/#<post-id> (comments by post)
并使用以下内容插入评论:
content://<authority>/comments
并非所有ContentProvider用户都会收到通知,因为URI模式不匹配。
为了解决这个问题,我确保我的ContentProvider调用notifyChange,其中附加的ID为'get all'URI和'get by post id'URL ...这只是一个解决方案。
以这种方式实现它的任何缺点?事后看来,仅仅依靠用户在ContentProvider查询的选择字符串中设置外键可能更容易......但是像pierr我想将它实现为单个URI。