ScheduleProvider (2)
昨晩エントリでいくつかのパターンを列挙してみました。
- 全件指定
- 範囲指定
- ID 指定
- サブクエリ付き
他にもあるのかもしれませんが、諸々確認しつつ掘ってみます。
buildExpandSelection メソド
基本的には SelectionBuilder のオブジェクトを生成してパターンに沿って云々しているように見えます。ええと例えば全件指定だと
case ROOMS: { return builder.table(Tables.ROOMS); }
みたいなカンジ。これは分かりやすいですね。あるいは ID 指定な例が以下。
case ROOMS_ID: { final String roomId = Rooms.getRoomId(uri); return builder.table(Tables.ROOMS) .where(Rooms.ROOM_ID + "=?", roomId); }
ええと Rooms は ScheduleContract ですね。getRoomId メソドの定義が以下。
public static String getRoomId(Uri uri) { return uri.getPathSegments().get(1); }
Uri のメソドを確認してみます。プロトタイプ的には以下らしい。
abstract List<String> getPathSegments()
ええと説明によれば
Gets the decoded path segments.
とのことですが List か。どうも Uri から ID を取り出すには
uri.getPathSegments().get(1)
にするのが常道らしく見えます。これ、もしかして以下な Uri からだと
content://com.example.transportationprovider/trains/122
"trains" が 0 番目で "122" が 1 番目、ということなのかな。path segments ってことで大丈夫と思おう。ID でナニする通常の query であれば uri があればライダムアクセスができるのが分かりました。
ちょい限界
SelectionsBuilder#where とか SelectionsBuilder#query など、要確認。