Android Studio - 值必须≥ 0
Android Studio - Value must be ≥ 0
我在 Android Studio 中遇到有关我的光标的错误。
我的代码中有以下行
String data = cursor.getString(cursor.getColumnIndex(columnIndex));
正在将 columnIndex 传递到方法中。
这部分 cursor.getColumnIndex(columnIndex) 产生以下错误
值必须≥0
它发生在我的 DBHelper class 和我的回收器适配器中,当它也使用游标时。
它显示为红色错误,但该应用程序仍然可以正常构建和运行。
有什么想法吗?
感谢您的帮助。
21 年 9 月 22 日更新
我正在按要求添加一些代码以及我是如何解决这个错误的。不确定这是否是最好的方法。
所以我使用的方法是这个....
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()
可以 return -1,您将其作为直接参数传递,并且游标获取器需要列索引 gte 0。获取器的参数已注释@IntRange(from = 0)
这就是为什么 lint 将其标记为错误的原因。
因此,即使 you 可能已经构建了您的项目,使其永远不会产生无效的列索引,但这种可能存在的事实是 lint 标记它的原因.
您的代码修改只是避免了这个问题。最好使用 cursor.getColumnIndexOrThrow()
或测试 index
for gte 0.
您可以摆脱更改,因为您比 lint 更了解您的项目,这不是最佳实践。
正确使用此方法:-
@SuppressLint("Range") 强名称 = cursor.getString(cursor.getColumnIndex(indexNumber));
我在 Android Studio 中遇到有关我的光标的错误。
我的代码中有以下行
String data = cursor.getString(cursor.getColumnIndex(columnIndex));
正在将 columnIndex 传递到方法中。
这部分 cursor.getColumnIndex(columnIndex) 产生以下错误
值必须≥0
它发生在我的 DBHelper class 和我的回收器适配器中,当它也使用游标时。
它显示为红色错误,但该应用程序仍然可以正常构建和运行。
有什么想法吗?
感谢您的帮助。
21 年 9 月 22 日更新
我正在按要求添加一些代码以及我是如何解决这个错误的。不确定这是否是最好的方法。
所以我使用的方法是这个....
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()
可以 return -1,您将其作为直接参数传递,并且游标获取器需要列索引 gte 0。获取器的参数已注释@IntRange(from = 0)
这就是为什么 lint 将其标记为错误的原因。
因此,即使 you 可能已经构建了您的项目,使其永远不会产生无效的列索引,但这种可能存在的事实是 lint 标记它的原因.
您的代码修改只是避免了这个问题。最好使用 cursor.getColumnIndexOrThrow()
或测试 index
for gte 0.
您可以摆脱更改,因为您比 lint 更了解您的项目,这不是最佳实践。
正确使用此方法:-
@SuppressLint("Range") 强名称 = cursor.getString(cursor.getColumnIndex(indexNumber));