我正在查看 Android 记事本应用程序示例代码<path_to_SDK>/samples/android-16/NotePad/src/com/example/android/notepad
.
我想知道是否有人可以向我解释为什么需要以下代码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()
method:
...
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;
...
为什么需要这张投影图?
The Notepad
申请来自SDK
demos 是一个示例应用程序,它应该是 API 使用和使用这些 API 的良好实践的示例,这就是他们可能使用投影图的原因。虽然Notepad
示例并不真正需要投影图,当需要投影图时,使用投影图可以很好地展示更复杂的情况。例如,如果我没记错的话,Shelves
由一位 Google 工程师编写的应用程序在其应用程序中使用了投影图ContentProvider
并且该投影图不仅仅是具有相同键值对的简单映射。
我还添加了该方法文档的链接SQLiteQueryBuilder.setProjectionMap http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#setProjectionMap%28java.util.Map%3Cjava.lang.String,%20java.lang.String%3E%29其中有一些关于为什么您需要投影图的详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)