gpt4 book ai didi

java - UriMatcher 没有正确匹配

转载 作者:行者123 更新时间:2023-11-30 02:53:32 26 4
gpt4 key购买 nike

首先:我已经筛选了很多关于 SO 主题的问题,但仍然没有找到正确的答案。

这是我的代码的一个(简化的)版本:

private static UriMatcher
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

private static final int
HOMEWORK_TABLE_REQUEST = 1,
CLASS_TABLE_REQUEST = 2,
SETTINGS_TABLE_REQUEST = 3,
HOMEWORK_ITEM_REQUEST = 4,
CLASS_ITEM_REQUEST = 5,
SETTINGS_ITEM_REQUEST = 6;

static {
uriMatcher.addURI("org.dvc.homeworkReminder.homeworkProvider", "homework", HOMEWORK_TABLE_REQUEST);
uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "homework/#", HOMEWORK_ITEM_REQUEST);
uriMatcher.addURI("org.dvc.homeworkReminder.homeworkProvider", "class", CLASS_TABLE_REQUEST);
uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "class/#", CLASS_ITEM_REQUEST);
uriMatcher.addURI("org.dvc.homeworkReminder.homeworkProvider", "settings", SETTINGS_TABLE_REQUEST);
uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "settings/#", SETTINGS_ITEM_REQUEST);
}

这是我的查询方法:

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor = null;
Log.i("dfg", "Query method called");
Log.i("dfg", "Uri = " + uri.toString());
Log.i("dfg", "Match: " + uriMatcher.match(uri));
switch(uriMatcher.match(uri)) {
case HOMEWORK_ITEM_REQUEST:
Log.i("dfg", "HOMEWORK_ITEM_REQUEST");
cursor = database.readCursorById(Integer.parseInt(uri.getLastPathSegment()));
break;
case HOMEWORK_TABLE_REQUEST:
Log.i("dfg", "HOMEWORK_TABLE_REQUEST");
cursor = database.readAllHomework();
break;
case CLASS_ITEM_REQUEST:
case CLASS_TABLE_REQUEST:
case SETTINGS_ITEM_REQUEST:
case SETTINGS_TABLE_REQUEST:
cursor = null;
break;
default:
cursor = null;
break;
}
return cursor;
}

我没有实现我的类请求或设置请求,所以这就是我默认返回 null 的原因。发生的事情是我的 switch 语句一直下降到 default:,并在我的代码中导致 NPE 的出现。您会注意到我的代码中有 5 个 Log 语句。以下内容打印到 LogCat。 (为什么它仍然被称为 logcat?)

Query method called
Uri = content://org.dvc.homeworkReminder.homeworkProvider/homework/24
Match: -1

现在被测试的 uri 应该匹配我添加的第二个模式,对吗?我还了解了 Uri.parse() 方法如何在另一个线程上与 UriMatcher 的通配符混淆,所以我构建了上面打印的 Uri使用以下代码:

Uri returnUri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority("org.dvc.homeworkReminder.homeworkProvider").appendPath("homework").appendPath(String.valueOf(id)).build();

那里的 id 变量取决于其他一些并不真正相关的东西。

我的问题是为什么 UriMatcher 不工作,我该如何修复它?

修复:

我在以下行中的大小写不正确:

uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "homework/#", HOMEWORK_ITEM_REQUEST);
uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "class/#", CLASS_ITEM_REQUEST);
uriMatcher.addURI("org.dvc.homeworkreminder.homeworkProvider", "settings/#", SETTINGS_ITEM_REQUEST);

注意 homeworkreminder 中的小写 r。感谢 Bruce 发现它!

最佳答案

您在设置匹配器时使用小写的“提醒”,但实际 URI 有大写的“提醒”。

关于java - UriMatcher 没有正确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com