モケラ

Tech Sheets

mokelab

ContentProviderのqueryを実装する

最終更新日:2015-07-07

データの追加ができるようになったら、次は取得できるようにしましょう。データの取得はContentProviderのquery()が呼ばれます。

ここまでの実装はここにあります。

public class TodoProvider extends ContentProvider {
    // 中略
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        switch (sUriMatcher.match(uri)) {
        case URITYPE_TODO_LIST:
            return queryTodoList(uri, projection, selection, selectionArgs, sortOrder);
        }
        return null;
    }

    private Cursor queryTodoList(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        // Uri = content://com.mokelab.todo.provider/users/{userId}/todos
        // pathSegments[0] = users
        // pathSegments[1] = {userId}
        // pathSegments[2] = todos
        String userId = uri.getPathSegments().get(1);
        Cursor cursor = mTodoDAO.query(userId, projection, selection, selectionArgs, sortOrder);
        return cursor;
    }

    // 以下省略
}

query()もinsert()と同様に、まずUriMatcherで振り分けを行います。振り分け後はDAOオブジェクトのquery()を呼び、実際のデータ取得を行います。DAOオブジェクトのquery()の実装はこの回を見てください。

これで最低限のことはできそうですが、ContentProviderではもう1つ実装すべきことがあります。それは次回紹介します。

一覧に戻る