UriMatcherで振り分ける
最終更新日:2015-07-07
ここからはContentProviderの各メソッドの実装に入ります。
ContentProviderの各メソッドはWeb APIのようにUriでリソース指定を行います。例えば、ユーザーAのメモの集合を表すUriは
content://com.mokelab.memo.provider/users/A/memos
のように指定するでしょう。
Android SDKには、このUriによる振り分けをサポートするためのUriMatcherというクラスが用意されています。ContentProviderクラスのstatic変数として次のように初期化して使えるようにします。
ここまで実装したものはここにあります。
public class TodoProvider extends ContentProvider {
private static final String AUTHORITY = "com.mokelab.todo.provider";
// region URI type
private static final int URITYPE_TODO_LIST = 1;
private static final int URITYPE_TODO = 2;
// endregion
private static final UriMatcher sUriMatcher;
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(AUTHORITY, "users/*/todos", URITYPE_TODO_LIST);
sUriMatcher.addURI(AUTHORITY, "users/*/todos/#", URITYPE_TODO);
}
// 以下省略
}
UriMatcherのコンストラクタに渡す引数は、ルート(ここでは、content://com.mokelab.todo.provider/)の扱いを指定します。UriMatcher.NO_MATCHは、「ルートUriはマッチしなかったとみなす」という指定になります。
newでUriMatcherオブジェクトを生成したあとは、addURI()でパターンを登録していきます。パスのパターン中に次の2つのワイルドカードが使えます。
- * : 任意の文字列
- # : 任意の数値