我创建了一个数据库,我希望通过使用游标从数据库中检索一些数据,我总是得到这个错误
04-19 20:02:56.747: E/AndroidRuntime(301): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
04-19 20:02:56.747: E/AndroidRuntime(301): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
04-19 20:02:56.747: E/AndroidRuntime(301): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
04-19 20:02:56.747: E/AndroidRuntime(301): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
这是函数的代码
public double getlatitude(String[] i,int x) {
// TODO Auto-generated method stub
String[] columns = new String[] { KEY_SQUAREID, KEY_SQUARELATITUDE, KEY_SQUARENAME,
KEY_SQUARELONGITUDE
};
Cursor c;
c=ourDatabase.query("squares", columns,"squarename=?",i, null, null, null);
String latitude = null;
if (c.moveToFirst()) {
latitude=c.getString(0);
}
double latitude_double=Double.parseDouble(latitude);
return latitude_double;
}
答案 0 :(得分:1)
试试这个
if(c.getCount() > 0) {
c.moveToFirst();
for(int i=0;i<c.getCount();i++) {
//do your logic here
}
}
答案 1 :(得分:0)
我认为问题在于:
latitude=c.getString(0);
将其更改为:
latitude = c.getString(c.getColumnIndex("column_name"));
并且也不要忘记在通过调用c.close();
答案 2 :(得分:0)
可能发生异常是因为您的光标为空(可能没有匹配)。为避免这种情况,请确保检查光标是否为空,如果光标为空,则不应尝试访问它。如果它不为空,则应检查最大行数,并确保不访问任何等于或高于最大行数的行。请参阅以下代码:
if ( c != null && c.getCount() > 0 ) {
if (c.moveToFirst()) {
do {
// do something here
} while (c.moveToNext());
}
c.close();
}
答案 3 :(得分:0)
每当你处理游标时,总是检查null并检查moveToFirst(),如果你想避免将来发生奇怪的崩溃。
if( c != null ){
if( c.moveToFirst() ){
//Do your stuff
}
}
//After finishing always close the cursor.
c.close();