IllegalArgumentException:2020 年 1 月安全路径中的无效列 null

IllegalArgumentException: Invalid column null in Path of Security January of 2020

我发现以下代码是如何使用我的投影查询 SQLiteQueryBuilder 的。

String[] selectFields = new String[5];
selectFields[0] = "pmp_id";

在 Android 的安全路径版本中,直到 01/01/2020 (dd/MM/yyyy) 此代码可以正常工作。在 01/01/2020 的路径版本中,应用程序生成错误:

java.lang.IllegalArgumentException: Invalid column null
    at android.database.sqlite.SQLiteQueryBuilder.computeSingleProjectionOrThrow(SQLiteQueryBuilder.java:1142)
    at android.database.sqlite.SQLiteQueryBuilder.computeProjection(SQLiteQueryBuilder.java:1113)
    at android.database.sqlite.SQLiteQueryBuilder.buildQuery(SQLiteQueryBuilder.java:888)
    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:561)
    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:475)

我已经通过这种方式修复了错误:

String[] selectFields = { "pmp_id" };

但我想了解为什么在旧版本中它有效而在新版本中却无效?

new String[5] 创建一个包含五个 String 引用的数组,您只分配给第一个插槽。剩余的插槽保持为空。

为什么这在最近的更新后开始崩溃似乎在 this commit 中有所解释,它更改了 SQLiteQueryBuilder 以使其输入更严格:

This change also offers setStrictColumns() to require that all untrusted column names are valid, such as those in ContentValues.