Android内容提供商相同的URI不匹配

时间:2012-08-19 04:53:55

标签: android uri android-contentprovider

我在这里误解了什么吗?我正在尝试在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);
    .
    .

这里,type始终为-1 ...在调试窗口中,我查看了传入uri和COURSES_URI,字符串表示相同......

有什么建议吗?

由于

更新

我使用以下方式调用内容提供商:

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

...这令人难以置信......只是得到了uri.equals(COURSES_URI)== true,所以UriMatcher中的某些内容必须是错误的

1 个答案:

答案 0 :(得分: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)获取(substring删除getPath()返回的前导'/')