0

我创建了一个数据库,我想通过使用游标从数据库中检索一些数据,但我总是收到此错误

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;
    }
4

4 回答 4

1

试试这个

if(c.getCount() > 0) {
   c.moveToFirst();
   for(int i=0;i<c.getCount();i++) {
     //do your logic here
   }
}
于 2012-04-19T18:17:57.100 回答
0

我认为问题出在这里:

latitude=c.getString(0);

将其更改为:

latitude = c.getString(c.getColumnIndex("column_name"));

并且不要忘记在通过调用返回值之前关闭光标c.close();

于 2012-04-19T18:19:41.837 回答
0

发生异常可能是因为您的光标为空(可能没有匹配项)。为避免这种情况,请确保检查光标是否为空,如果为空,则不应尝试访问它。如果它不为空,您应该检查最大行数并确保您不会访问任何等于或高于最大行数的行。请看下面的代码:

if ( c != null && c.getCount() > 0 ) {
    if (c.moveToFirst()) {
        do {

            // do something here

        } while (c.moveToNext());
    }
    c.close();
}
于 2012-04-19T18:24:03.913 回答
0

每当您处理游标时,如果您想避免将来出现奇怪的崩溃,请务必检查 null 并检查 moveToFirst() 是否失败。

if( c != null ){
    if( c.moveToFirst() ){
        //Do your stuff
    }
}

//After finishing always close the cursor.
c.close();
于 2012-04-19T18:32:46.510 回答