游标异常

时间:2012-04-19 18:14:28

标签: android

我创建了一个数据库,我希望通过使用游标从数据库中检索一些数据,我总是得到这个错误

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 个答案:

答案 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();