不在_id上的选择查询的Android ContentProvider URI格式

时间:2014-04-20 22:28:48

标签: android rest android-contentprovider

我正在尝试了解Android REST风格的ContentProvider URI。假设我有一个消息数据库,每个消息都有一个“_id”和“recipient”字段(以及其他字段)。

我了解如何获取所有消息的所有列:

// Get all messages.
URI uri = Uri.parse("content://" + AUTHORITY + "/messages");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

我理解如何使用_id为1来获取消息:

// Get the message with _id 1.
URI uri = Uri.parse("content://" + AUTHORITY + "/messages/1");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

如果我想获取收件人值为foo@bar.com的邮件怎么办?

// Get the messages with recipient "foo@bar.com"
URI uri = Uri.parse("content://" + AUTHORITY + ??);  // What goes here?
Cursor cursor = getContentResolver().query(uri, null, 
    "recipient = ?", "foo@bar.com", null);

如果风格更好,我很乐意在URI中传递收件人值:

// Get the messages with recipient "foo@bar.com"/
URI uri = Uri.parse("content://" + AUTHORITY + ?? + "foo@bar.com");  // What goes here?
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

对于最后一个用例,首选的URI格式是什么?

更新:我是ContentProvider和客户端的作者,所以我可以使用我想要的任何格式。我仍然想知道什么是最佳实践

1 个答案:

答案 0 :(得分:2)

  

在最后一种情况下,URI中的AUTHORITY之后应该怎么做?

无论你想要什么。如果您正在编写ContentProvider,则由您来定义Uri语法对权限右侧的路径段的含义。

在您的情况下,您通过查询参数传递值(foo@bar.com)。因此,您的??可以是:

  • 什么都没有
  • 一些路径段,可帮助您确定要查询的表格类型,例如messages
  • asrasiojdflkasdjkl90238490qa89dsfjlas或其他随机字符串