Android Content Provider - 使用查询方法进行插入、删除和更新

Android Content Provider - Using Query Method To Insert, Delete, and Update

我一直在通过阅读 Android Developer Fundamentals (Version 1) 来研究 Content Provider。

在“11.1 通过内容提供商共享数据”/"The query() method" 部分下,有一条注释指出

Note: The insert, delete, and update methods are provided for convenience and clarity. Technically, the query method could handle all requests, including those to insert, delete, and update data.

如何使用查询方法插入/删除/更新数据?查询方法具有以下签名并且不接受自定义 SQL 字符串。

public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder){}

我找不到任何资源来说明如何做到这一点。似乎都使用了提供的方法。

坦率地说,该培训指南中的那项工作确实很糟糕。只会让人迷惑。

我猜他们的意思是 query() 没有什么神奇的东西可以强制它只执行 SQL SELECT 语句。 ContentProvider 是一个门面——你可以用它来存储和检索几乎任何你想要的东西,而不仅仅是 SQLite。

所以,您可以使用 query() 方法:

  • 检查 Uri
  • 寻找它的形式 content://your.authority/something/insert/put/data/here
  • 解析 Uri 以获得 putdatahere
  • 将 table 中的那些插入到一些预先确定的列下
  • Return一个空MatrixCursor

或者,它可以:

  • 检查 Uri
  • 寻找它的形式 content://your.authority/something/insert
  • 插入一行,使用 projection 作为列,使用 selectionArgs 作为要放入这些列的值
  • Return一个空MatrixCursor

我不知道为什么有人会那样做,但这肯定是可能的。