如何在ContentProvider中使用URI

时间:2014-04-14 19:55:27

标签: android uri

我没有在Android内容提供商中获得uris的概念。我的数据库由三个表组成。我实际上从不查询单个表,而是需要使用关节来获取所需数据。现在我的桌子是A,B,C。

private static final String AUTHORITY = "com.example.database.contentprovider";

// uri for each table
public static final Uri CONTENT_URI_A = Uri.parse("content://" + AUTHORITY + "/" + A.TABLE_NAME);
public static final Uri CONTENT_URI_B = Uri.parse("content://" + AUTHORITY + "/" + B.TABLE_NAME);
public static final Uri CONTENT_URI_C = Uri.parse("content://" + AUTHORITY + "/" + C.TABLE_NAME);
  1. 为什么我需要AUTHORITY Uri?
  2. 您是否需要为每个表或每个可能的查询使用Uri?正如我所说,我不需要只查询一个表,因此看不出我需要CONTENT_URI_A,CONTENT_URI_B和CONTENT_URI_C的原因。
  3. 我是否认为我需要使用URI来确定要进行哪种查询?

1 个答案:

答案 0 :(得分:1)

内容URI只是与特定查询关联的唯一字符串uri - 它们不需要与基础表结构相关。

URI的"content://" + AUTHORITY + "/"部分通过使用您的应用程序独有的AUTHORITY来尝试确保字符串是唯一的(即,它们不会与其他应用程序冲突)。

它们有两个主要目的:

  • 允许您的queryupdateinsertdelete来电,轻松区分不同的查询(当然,您可以使用selectionprojection或其他参数来执行此操作,但通常使用UriMatcher更容易快速解析URI
  • 允许您在返回的Cursor上致电Cursor.setNotificationUri,{{1}}会在调用ContentResolver.notifyChange(uri, null)时自动重新查询数据(即在您的插入/更新/删除调用中)。当基础数据发生变化时,使用Loader FrameworkCursorLoader自动接收回调时,此功能特别有用。