Mew*_*zer 12 android android-contentprovider android-sqlite
我正在查看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)
Run Code Online (Sandbox Code Playgroud)
我注意到投影贴图稍后在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;
...
Run Code Online (Sandbox Code Playgroud)
为什么需要这个投影图?
Luk*_*rog 10
在Notepad从应用SDK演示是一个示例应用程序,一个应该是API的使用和使用这些API的良好做法的例子,这就是为什么他们可能使用的投影图.虽然Notepad样本并不真正需要投影图,但是当需要一个投影图时,使用一个投影图可以很好地展示更复杂的情况.例如,如果我没记错的话,Shelves其中一位Google工程师编写的应用程序在其中使用了投影贴图,ContentProvider而投影贴图不仅仅是具有相同键值对的简单映射.
我还添加了一个方法文档的链接,SQLiteQueryBuilder.setProjectionMap其中包含了为什么需要投影贴图的一些细节.
其主要目的是重命名查询生成的游标中的列名.
@static声明
SEARCH_PROJECTION_MAP = new HashMap<String, String>();
SEARCH_PROJECTION_MAP.put( OpenHelper.NAME, OpenHelper.NAME + " as _name" );
SEARCH_PROJECTION_MAP.put( OpenHelper.ID , OpenHelper.ID + " as _id" );
Run Code Online (Sandbox Code Playgroud)
@your查询功能
//if you query using sqliteQueryBuilder then
sqLiteQueryBuilder.setProjectionMap( SEARCH_PROJECTION_MAP );
//example if you just query
Cursor cursor = sqLiteQueryBuilder.query( db, projection, selection, selectionArgs, null, null, sortOrder );
Run Code Online (Sandbox Code Playgroud)
在此示例中,返回的列现在是_name和_id.
| 归档时间: |
|
| 查看次数: |
9421 次 |
| 最近记录: |