android - Android 投影图在内容提供者中的用途是什么?

标签 android android-contentprovider android-sqlite

我正在查看 <path_to_SDK>/samples/android-16/NotePad/src/com/example/android/notepad 中的 Android 记事本应用程序示例代码.

我想知道是否有人可以向我解释为什么 NotepadProvider.java 中需要以下代码?

// Creates a new projection map instance. The map returns a column name
// given a string. The two are usually equal.
sNotesProjectionMap = new HashMap<String, String>();

// Maps the string "_ID" to the column name "_ID"
sNotesProjectionMap.put(NotePad.Notes._ID, NotePad.Notes._ID);

// Maps "title" to "title"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_TITLE,NotePad.Notes.COLUMN_NAME_TITLE);

// Maps "note" to "note"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_NOTE, NotePad.Notes.COLUMN_NAME_NOTE);

// Maps "created" to "created"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_CREATE_DATE, NotePad.Notes.COLUMN_NAME_CREATE_DATE);

// Maps "modified" to "modified"
sNotesProjectionMap.put(
        NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE,
        NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE)

我注意到稍后在 query() 中使用了投影图方法:

...
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(NotePad.Notes.TABLE_NAME);

/**
 * Choose the projection and adjust the "where" clause based on URI pattern-matching.
 */
switch (sUriMatcher.match(uri)) {
    // If the incoming URI is for notes, chooses the Notes projection
    case NOTES:
    qb.setProjectionMap(sNotesProjectionMap);
    break;
...

为什么需要这张投影图?

最佳答案

SDK 演示中的Notepad 应用程序是一个示例应用程序,它应该是 API 使用和使用这些 API 的良好实践的示例,这就是为什么它们可能使用投影图。尽管 Notepad 示例实际上并不需要投影图,但在需要投影图时,使用投影图可以很好地展示更复杂的情况。例如,如果我没记错的话,一位 Google 工程师编写的 Shelves 应用程序在其 ContentProvider 中使用了投影图,而该投影图不仅仅是一个简单的具有相同键值对的映射。

我还添加了指向方法文档的链接 SQLiteQueryBuilder.setProjectionMap其中详细说明了为什么需要投影图。

关于android - Android 投影图在内容提供者中的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750688/

相关文章:

php - 如何管理mysql中每天5000条记录的插入更新?

android - 在复制/剪切选择上覆盖或隐藏工具栏

java - 如何使用 GSON 序列化/反序列化部分 JSON 对象?

android - Android中如何将json对象转换成字符串

android - YouTube 数据 API v3 - 参数 "publishedAfter"无效

android - DB-Activity 架构和/或 Context 泄漏的 ContentProvider 解决方案

android - Spotify 内容提供商

android - SyncAdapter periodicsync() 不触发

android - 如何将自己的ContentProvider用于其他应用程序?

android - 如何从内容 ://mms. 中检索彩信的日期