Android Studio - 值必须是?0

Jus*_*tin 37 android android-cursor

我在 Android Studio 中收到与光标有关的错误。

\n

我的代码中有以下行

\n
String data = cursor.getString(cursor.getColumnIndex(columnIndex));\n
Run Code Online (Sandbox Code Playgroud)\n

columnIndex 被传递到该方法中。

\n

这部分cursor.getColumnIndex(columnIndex)产生以下错误

\n

值必须是 \xe2\x89\xa5 0

\n

当它也使用游标时,它发生在我的 DBHelper 类和我的回收器适配器中。

\n

它显示为红色错误,但应用程序仍然可以正常构建和运行。

\n

有任何想法吗?

\n

谢谢你的帮助。

\n

21 年 9 月 22 日更新

\n

我根据要求添加了一些代码以及我如何解决此错误。但不确定这是否是最好的方法。

\n

所以我使用的方法是这样的......

\n
public String getTripInfo(String tableName, int tripNo, String columnIndex){\n    String data = "";\n\n    // Select all query\n    String selectQuery = "SELECT * FROM " + tableName + " WHERE " + TRIP_DETAILS_TRIP_NUMBER + "=" + tripNo;\n\n    SQLiteDatabase db = this.getReadableDatabase();\n    Cursor cursor = db.rawQuery(selectQuery, null);\n\n    // Looping through all rows and adding to list\n    if(cursor.moveToFirst()){\n        do{\n            data = cursor.getString(cursor.getColumnIndex(columnIndex));\n        } while(cursor.moveToNext());\n    }\n\n    // Closing connections\n    cursor.close();\n    db.close();\n\n    //Returning number plates\n    return data;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

错误出在 do while 循环中。红色部分是“cursor.getColumnIndex(columnIndex))”

\n

我解决此错误的方法是使用以下代码

\n
public String getTripInfo(String tableName, int tripNo, String columnIndex){\n    String data = "";\n\n    // Select all query\n    String selectQuery = "SELECT * FROM " + tableName + " WHERE " + TRIP_DETAILS_TRIP_NUMBER + "=" + tripNo;\n\n    SQLiteDatabase db = this.getReadableDatabase();\n    Cursor cursor = db.rawQuery(selectQuery, null);\n\n    // Looping through all rows and adding to list\n    if(cursor.moveToFirst()){\n        do{\n            int index = cursor.getColumnIndex(columnIndex);\n            data = cursor.getString(index);\n        } while(cursor.moveToNext());\n    }\n\n    // Closing connections\n    cursor.close();\n    db.close();\n\n    //Returning number plates\n    return data;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ngu*_*Son 47

我有一个这样的错误。
我的解决方案:将方法更改getColumnIndexgetColumnIndexOrThrow.


Dan*_*vis 36

问题是cursor.getColumnIndex()可以返回 -1,您将其作为直接参数传递,并且游标 getters 需要列索引 gte 0。 getters 的参数带有注释,@IntRange(from = 0)这就是 lint 将其标记为错误的原因。

因此,即使可能已经构建了项目,使其永远不会产生无效的列索引,但这种可能性可能存在的事实就是 lint 标记它的原因。

您的代码修订只能避免该问题。最好使用cursor.getColumnIndexOrThrow()或测试indexgte 0。

您可以逃避更改,因为您比 lint 更了解您的项目,但这不是最佳实践。