2012-04-19 57 views
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; 
    } 

回答

1

試試這個

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

它給了我同樣的錯誤 – 2012-04-19 18:23:09

+0

@KhaledMohamed嘗試光標的打印數量進行記錄,Log.d(TAG,將String.valueOf(c.getCount())之前if語句 – 2012-04-19 18:31:48

+0

我搞清楚你是right感謝您的幫助 – 2012-04-19 23:43:00

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