只是想了解原因:
db = databaseHandler.getReadableDatabase();
String[] columns = {ID, NAME, DIFFICULTY};
Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, DIFFICULTY);
上面代码 fragment 中的大写变量显然是静态的final。 Android Studio 告诉我
“该检查根据代码的数据流分析,报告指定检查范围内始终为真或假的条件,并指出可能抛出 RuntimeException 的位置。该检查还报告 Nullable/NotNull 契约违反。可以配置支持契约(Contract)的注释(默认情况下将使用 annotations.jar 中的 @Nullable/@NotNull 注释)”
这对我来说是胡言乱语。谁能解释一下?
最佳答案
该工具试图帮助您找到可能发生错误的地方。
在这种特殊情况下,它会提示您使用 null
的每个地方以及它无法证明允许这种用法的地方。
然而,documentation显示这些参数确实允许 null
值,因此该工具是错误的。
此外,SQLiteDatabase
的query
方法是Android API 的一部分,因此没有借口。将此视为检查器中的错误。
关于Android SQLiteDatabase 查询可能会产生 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915890/