1

我在这里误解了什么吗?我正在尝试在 Android 中实现 ContentProvider,但由于某种原因,调用 URI 不匹配。在我的 ContentProvider 中,我定义了以下内容:

private static final int GET_COURSES = 100;
public static final Uri COURSES_URI = Uri.withAppendedPath(CONTENT_URI, CourseTable.NAME);
private static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
static 
{
    matcher.addURI(AUTHORITY, COURSES_URI.toString(), GET_COURSES);
}

然后,在我的查询调用中:

public Cursor query(Uri uri, ...)
{
    int type = matcher.match(uri);
    .
    .

在这里,类型始终为 -1 ...在调试窗口中,我查看了传入的 uri 和 COURSES_URI 并且字符串表示形式相同...

有什么建议么?

谢谢

更新:

我使用以下方法调用内容提供者:

new CursorLoader(this, CoursesProvider.COURSES_URI, null, null, null, null);

...这让我难以置信...刚刚得到 uri.equals(COURSES_URI) == true,所以 UriMatcher 中的某些内容一定是不正确的

4

1 回答 1

1

问题解决了...最初的问题是 COURSES_URI 还包含 AUTHORITY 路径:

private static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + DBManager.DB_NAME);
private static final Uri COURSES_URI = Uri.withAppendedPath(CONTENT_URI, CourseTable.NAME);

在该matcher.AddURI(authority,path,code)方法中,路径的权限部分应该被删除。

这可以使用COURSES_URI.getPath().substring(1)(删除 getPath() 返回的前导 '/' 的子字符串)来获得

于 2012-08-20T02:01:24.720 回答