2011-04-30 63 views
0

我試圖從遊標插入數據到我的數據庫,但出現錯誤。向數據庫插入值時出現遊標越界異常 - Android

這是我做的 -

Cursor getUserDrinks = myDbHelper.getUserDrinks(); 
    if(getUserDrinks != null) 
    { 
     if (getUserDrinks.moveToFirst()){ 
       do{ 
        ContentValues initialValues = new ContentValues(); 
        initialValues.put("code", getUserDrinks.getInt(getUserDrinks.getColumnIndex("code"))); 
        initialValues.put("imgstr", getUserDrinks.getString(getUserDrinks.getColumnIndex("imgstr"))); 
        initialValues.put("name", getUserDrinks.getString(getUserDrinks.getColumnIndex("name"))); 
        initialValues.put("alc", getUserDrinks.getDouble(getUserDrinks.getColumnIndex("alc"))); 
        initialValues.put("user", 1); 

        try { 
          myDataBase.beginTransaction(); 
          myDataBase.insert("drinks", null, initialValues); 
          myDataBase.setTransactionSuccessful(); 
          } 
         finally { 
          myDataBase.endTransaction(); 
          } 
       }while(getUserDrinks.moveToNext()); 
     } 
    } 

但它給了我一個CursorIndexOutOfBoundsException。這裏的日誌 -

04-30 13:22:35.363: ERROR/AndroidRuntime(19161): java.lang.RuntimeException: Unable to   start activity ComponentInfo{android.alco/android.alco.main}: android.database.CursorIndexOutOfBoundsException: Index 2 requested, with a size of 2 

我知道光標不是空的。

我在做什麼錯?

+0

出於某種原因,它不承認Java代碼。希望有人能爲我解決這個問題,因爲我無法做到。謝謝! – Tofira 2011-04-30 10:39:56

+1

如果您想要將文本視爲代碼,您必須在每行的開頭放置四個空格。 – Malcolm 2011-04-30 10:48:40

回答

1

問題是,當您已經放置在最後一個元素之後並且想要更進一步時,moveToNext()返回false。有效位置的範圍是從-1到elementCount(含),所以最後的位置是合法的,但沒有元素。這是真正發生在你的代碼,如果遊標有兩個位置:

  1. 你叫moveToFirst(),光標與指數0
  2. 定位在第一個元素你讀出的值,並調用moveToNext()。運動成功後,您位於索引1處。
  3. 您閱讀值並致電moveToNext()。運動成功後,您將被定位在索引2處,這超出了最後一個元素。
  4. 您嘗試閱讀的價值和失敗,因爲索引沒有元素2.

你需要做的是以下幾點:

cursor.moveToFirst(); 
while (!cursor.isAfterLast()) { 
    //Read the contents 
    cursor.moveToNext(); //Advance to the next element 
} 
+0

謝謝,這部分工作。我現在沒有遇到錯誤,但由於某種原因,該值未插入到數據庫中。該程序只是繼續運行,沒有顯示錯誤,但由於某種原因沒有輸入值... – Tofira 2011-04-30 11:30:12

+0

我想這是一個不同的問題的主題,沒有足夠的信息來回答它現在。這部分代碼對我來說似乎很好,這個問題可能在別處。 – Malcolm 2011-04-30 11:42:17

+0

我不確定這是一個不同的問題,因爲它仍然沒有插入值。沒有什麼更多,我沒有更多的信息。我真的不知道該怎麼做,因爲插入在應用程序的其他部分工作正常。 – Tofira 2011-04-30 11:55:11