2014-07-25 155 views
-1

我在崩潰報告中收到此錯誤,但無法弄清楚它的含義。我認爲它是因爲我說如果我的光標爲空則返回-1。這會導致崩潰。但我不確定爲什麼我的光標會爲空?我的DB類中的這個方法在我的一個活動的onResume中被調用。在onCreate中調用它會更好嗎(這種方式只能調用一次)?android.database.CursorIndexOutOfBoundsException:請求索引-1,大小爲0

public int getLastId() { 
     String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_LEVEL, KEY_MONEY, KEY_DAYSLEFT, KEY_VOTES, KEY_CORRUPTION}; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns,null , null, null, null, null); 

     if(c != null){ 
      c.moveToLast(); 
      int id = c.getInt(0); 
      return id; 
     } 
     return -1; 
    } 

這段代碼會更好嗎?

public int getLastId() throws SQLException{ 
     String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_LEVEL, KEY_MONEY, KEY_DAYSLEFT, KEY_VOTES, KEY_CORRUPTION}; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns,null , null, null, null, null); 

     if(c != null){ 
      c.moveToLast(); 
      int id = c.getInt(0); 
      return id; 
     } 
     return 0; 
    } 

回答

1

看來你有一個空的遊標。因此也檢查遊標count.i.e。改變

if(c != null){ 
      c.moveToLast(); 
      int id = c.getInt(0); 
      return id; 
     } 

if(c != null && c.getCount() > 0){ 
      c.moveToLast(); 
      int id = c.getInt(0); 
      return id; 
     } 
+0

我會嘗試。我仍然應該保持默認返回-1? – user3812501

+0

@ user3812501如果表爲空,它取決於你想要的內容。 –

1

這可能是由moveToLast()通話提高了,你得到它,因爲你的Cursor沒有行,大概是因爲你的表是空的。

+0

感謝CommonsWare,但這種情況不會發生所有的時間只是偶爾表不是空的。上面編輯的代碼會更好嗎? – user3812501

+0

@ user3812501:「但該表不是空的」 - 由於您沒有檢查返回行的數量,因此我無法看到您如何知道該表不是空的。 – CommonsWare

+0

好點,我猜它不是空的是因爲這個調用大部分時間工作(這個數據庫中只有一個表,在調用之前創建的很好) – user3812501

相關問題