我在Android Studio中遇到了与我的Cursor相关的错误。
以下是我的代码中的一行:
String data = cursor.getString(cursor.getColumnIndex(columnIndex));
columnIndex被传递到该方法中。
cursor.getColumnIndex(columnIndex)这一部分会产生以下错误
值必须≥ 0
这发生在我的DBHelper类和使用cursor的回收器适配器中。
它显示为红色错误,但应用程序仍然可以构建和运行。
有任何想法吗?
感谢任何帮助。
更新22-Sep-21
根据请求,我正在添加一些代码以及我如何解决此错误。 不确定这是否是最好的方法。
所以我正在使用的方法是....
public String getTripInfo(String tableName, int tripNo, String columnIndex){
String data = "";
// Select all query
String selectQuery = "SELECT * FROM " + tableName + " WHERE " + TRIP_DETAILS_TRIP_NUMBER + "=" + tripNo;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Looping through all rows and adding to list
if(cursor.moveToFirst()){
do{
data = cursor.getString(cursor.getColumnIndex(columnIndex));
} while(cursor.moveToNext());
}
// Closing connections
cursor.close();
db.close();
//Returning number plates
return data;
}
错误出现在do while循环中。红色部分是“cursor.getColumnIndex(columnIndex))”。
我解决这个错误的方法是使用以下代码:
public String getTripInfo(String tableName, int tripNo, String columnIndex){
String data = "";
// Select all query
String selectQuery = "SELECT * FROM " + tableName + " WHERE " + TRIP_DETAILS_TRIP_NUMBER + "=" + tripNo;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Looping through all rows and adding to list
if(cursor.moveToFirst()){
do{
int index = cursor.getColumnIndex(columnIndex);
data = cursor.getString(index);
} while(cursor.moveToNext());
}
// Closing connections
cursor.close();
db.close();
//Returning number plates
return data;
}
cursor.getColumnIndexOrThrow(...)
。原始问题是一个lint问题 - 运行./gradlew lint
会显示此问题。这可能是最新的AS版本 - Arctic Fox 2020.3.1补丁2 - 在更新到此补丁版本之后,没有进行任何代码更改,因此无法构建项目 - 如果查看更改日志,它提到了关于lint检查的修复程序:https://androidstudio.googleblog.com/2021/09/android-studio-arctic-fox-202031-patch.html和https://issuetracker.google.com/issues/197146610?pli=1可能是这个原因... - Mark