モケラ

Tech Sheets

mokelab

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つのワイルドカードが使えます。

  • * : 任意の文字列
  • # : 任意の数値

一覧に戻る