私は<path_to_SDK>/samples/android-16/NotePad/src/com/example/android/notepad
にAndroidのメモ帳アプリケーションのサンプルコードで探しています。コンテンツプロバイダの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)
Iが投影マップが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は()'良い説明があります。 – Luksprog
ありがとうございます。多分私の質問は十分ではなかった - 私は投影図が何であるか理解していますが、同じキーと値を持つ写像しか含まれていない投影図があるのはどういうことでしょうか(私は少なくとも1つの写像キーと値のペアが違う)。 – Mewzer
これはサンプルアプリケーションであり、 'API'の使用例とそれらのAPIを使用した優れたプラクティスです。つまり、おそらくプロジェクションマップを使用しています。例えば、私が正しく覚えていれば、Googleのエンジニアの1人が作成した 'Shelves'アプリケーションは' ContentProvider'で投影マップを使用しています。投影マップは同じキーと値のペアを持つ単純なマッピングではありません。 – Luksprog