我在这里误解了什么吗?我正在尝试在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中的某些内容必须是错误的
答案 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()返回的前导'/')