【发布时间】:2012-10-05 16:51:26
【问题描述】:
我在看<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;
...
为什么需要这个投影图?
【问题讨论】:
-
SQLiteQueryBuilder.setProjectionMap()的文档有很好的解释。 -
谢谢。也许我的问题不够清楚 - 我了解投影图是什么,但我想知道拥有一个仅包含具有相同键和值的映射的投影图有什么意义(如果至少有一个映射,我会理解有不同的键值对)。
-
这是一个示例应用程序,应该是
API使用的示例和使用APIs的良好实践,这就是他们可能使用投影图的方式。例如,如果我没记错的话,一位谷歌工程师制作的Shelves应用程序在其ContentProvider中使用了投影图,并且该投影图不仅仅是具有相同键值对的简单映射。跨度> -
谢谢 - 如果你把你的评论变成一个答案,那么我会接受它。
标签: android android-contentprovider android-sqlite