Jus*_*tin 37 android android-cursor
我在 Android Studio 中收到与光标有关的错误。
\n我的代码中有以下行
\nString data = cursor.getString(cursor.getColumnIndex(columnIndex));\nRun Code Online (Sandbox Code Playgroud)\ncolumnIndex 被传递到该方法中。
\n这部分cursor.getColumnIndex(columnIndex)产生以下错误
\n值必须是 \xe2\x89\xa5 0
\n当它也使用游标时,它发生在我的 DBHelper 类和我的回收器适配器中。
\n它显示为红色错误,但应用程序仍然可以正常构建和运行。
\n有任何想法吗?
\n谢谢你的帮助。
\n21 年 9 月 22 日更新
\n我根据要求添加了一些代码以及我如何解决此错误。但不确定这是否是最好的方法。
\n所以我使用的方法是这样的......
\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n错误出在 do while 循环中。红色部分是“cursor.getColumnIndex(columnIndex))”
\n我解决此错误的方法是使用以下代码
\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n
Dan*_*vis 36
问题是cursor.getColumnIndex()可以返回 -1,您将其作为直接参数传递,并且游标 getters 需要列索引 gte 0。 getters 的参数带有注释,@IntRange(from = 0)这就是 lint 将其标记为错误的原因。
因此,即使您可能已经构建了项目,使其永远不会产生无效的列索引,但这种可能性可能存在的事实就是 lint 标记它的原因。
您的代码修订只能避免该问题。最好使用cursor.getColumnIndexOrThrow()或测试indexgte 0。
您可以逃避更改,因为您比 lint 更了解您的项目,但这不是最佳实践。
| 归档时间: |
|
| 查看次数: |
19445 次 |
| 最近记录: |