Notepad 再読
ContentProvider あたりのソレを再確認。
とりあえず、NotePadProvider.java の不明点掘削メモを以下に。
SQLiteQueryBuilder クラス
例えば query メソドで以下な記述があります。
@Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(NOTES_TABLE_NAME); switch (sUriMatcher.match(uri)) { case NOTES: qb.setProjectionMap(sNotesProjectionMap); break;
SQLQueryBuilder というクラスは SELECT による SQL 問合せのためのクラスとのこと。setProjectionMap というメソドはカラム名の別名を云々な模様。SELECT 分で AS を使って別名を、にあたる模様。
NotePad な実装では基本同じになってます。
sNotesProjectionMap = new HashMap<String, String>(); sNotesProjectionMap.put(NoteColumns._ID, NoteColumns._ID); sNotesProjectionMap.put(NoteColumns.TITLE, NoteColumns.TITLE); sNotesProjectionMap.put(NoteColumns.NOTE, NoteColumns.NOTE); sNotesProjectionMap.put(NoteColumns.CREATED_DATE, NoteColumns.CREATED_DATE); sNotesProjectionMap.put(NoteColumns.MODIFIED_DATE, NoteColumns.MODIFIED_DATE);
以下がクエリ実行な部分かな。
// Get the database and run the query SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
projection、selection、selectionArgs は query の引数ですね。query の手続き定義としては
- SQLiteQueryBuilder なオブジェクト生成
- setTables メソドでテーブル名設定
- UriMatcher#match メソドに引数で渡された Uri オブジェクトを渡す
- 並び順を設定
- クエリ実行
- Cursor#setNotificationUri 呼び出し
- Cursor なオブジェクトを戻す
という流れか。
getType メソド
これも定型か。定義は以下。
@Override public String getType(Uri uri) { switch (sUriMatcher.match(uri)) { case NOTES: case LIVE_FOLDER_NOTES: return NoteColumns.CONTENT_TYPE; case NOTE_ID: return NoteColumns.CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri); } }
戻す文字列は BaseColumns を継承して作るクラスで定義されてて以下。
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.note"; public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.note";
データタイプを表現する文字列については確認必要。
とりあえずエントリ投入します。insert、update、delete についてはこの後掘削対応すれば追記の方向にて。