插入UriMatcher

时间:2014-05-08 14:20:39

标签: android uri android-contentprovider

我对UriMatcher有点困惑。

sURIMatcher.addURI(AUTHORITY, BASE_PATH, BOOK);
sURIMatcher.addURI(AUTHORITY, BASE_PATH + "/#", BOOK_ID);

实际存储在BOOK的路径中的是什么? 当更新和删除时,BOOK_ID将是唯一使用的东西,那么BOOK的用途是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

这是urimatcher的迷你入门。 BOOK和BOOK_ID是常量整数,提供程序仅使用它来确定要执行的代码。 BASE_PATH是一个由调用者传入的字符串,可能是表的名称,但实现并不严格。 AUTHORITY是调用者com.example.provider传入的字符串。

uri进入内容提供程序会发生什么,urimatcher用于通过返回整数来确定要执行的代码。

int uriType = sURIMatcher.match(uri);
        switch (uriType) {
        case TODOS:
            checkColumns(availableRides, projection);
            queryBuilder.setTables(RidesDatabaseHandler.TABLE_RIDES);
            break;
        case TODO_ID:
            checkColumns(availableRides, projection);
            queryBuilder.setTables(RidesDatabaseHandler.TABLE_RIDES);
            // adding the ID to the original query
            queryBuilder.appendWhere(RidesDatabaseHandler.KEY_ID + "="
                    + uri.getLastPathSegment());
            break;
        case LOCATIONS:
            checkColumns(availableLocations, projection);
            queryBuilder.setTables(RidesDatabaseHandler.TABLE_LOCATIONS);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }