2012-04-19 2 views
0

Я создал базу данных, и я хочу, чтобы получить некоторые данные из базы данных, используя курсор, я всегда получаю эту ошибкуCursor Исключение

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

ответ

1

Попробуйте

if(c.getCount() > 0) { 
    c.moveToFirst(); 
    for(int i=0;i<c.getCount();i++) { 
    //do your logic here 
    } 
} 
+0

Это дает мне ту же ошибку –

+0

@KhaledMohamed Попробуйте посчитать печать курсора войти, Log.d (TAG, String.valueOf (c.getCount()) до этого, если заявление –

+0

я понять это вы правильно Спасибо за вашу помощь –

0

Я думаю, что проблема здесь:

latitude=c.getString(0); 

Изменить это:

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

, а также не забудьте закрыть курсор перед возвратом значения с помощью вызова c.close();

0

Исключение, вероятно, происходит потому, что ваш курсор пуст (возможно, было не совпадение). Чтобы этого избежать, убедитесь, что вы проверяете, пустой или нет курсор, если он пуст, вы не должны пытаться получить к нему доступ. И если он не пуст, вы должны проверить максимальное количество строк и убедиться, что у вас нет доступа к любой строке, равной или превышающей максимальное количество строк. Смотрите код ниже:

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

      // do something here 

     } while (c.moveToNext()); 
    } 
    c.close(); 
} 
0

Всякий раз, когда вы имеете дело с курсорами, всегда проверяйте утративший проверить на moveToFirst() не обязательно, если вы хотите избежать странных сбоев в будущем.

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

//After finishing always close the cursor. 
c.close(); 
Смежные вопросы