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つのワイルドカードが使えます。
- * : 任意の文字列
 - # : 任意の数値
 

