我在Android Studio中得到一个错误与我的光标。
我的代码中有以下行
String data = cursor.getString(cursor.getColumnIndex(columnIndex));
columnIndex正在被传递给方法。
这部分cursor.getColumnIndex(columnIndex)产生以下错误
值必须≥0
当它也使用游标时,它发生在我的DBHelper类和我的回收器适配器中。
显示为红色错误,但应用程序仍然构建和运行没有问题。
任何想法?
谢谢你的帮助。
更新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;
}
我有一个这样的错误。
我的解决方案:将方法getColumnIndex
改为getColumnIndexOrThrow
。
问题是cursor.getColumnIndex()
可以返回-1,您将其作为直接参数传递,并且游标getter需要列索引gte 0。getter的参数用@IntRange(from = 0)
注释,这就是为什么lint将其标记为错误。
所以即使你可能已经构建了您的项目,使其永远不会产生无效的列索引,这种可能存在的事实是为什么lint标记它。
你的代码修订只是避免了这个问题。对于gte 0,最好使用cursor.getColumnIndexOrThrow()
或测试index
。
你可以摆脱你的改变,因为你比lint更了解你的项目,这只是不是最佳实践。
正确使用此方法:-
@SuppressLint("Range"强名称= cursor.getString(cursor.getColumnIndex(indexNumber));