2011-09-27 144 views
0

加載所以我還是建立一個數據庫,以支持我的一個項目。有兩種不同的東西要保存:第一,屬性存儲在一個Java類中的一些球員的對象;第二,簡單值的值。安卓:從SQLite數據庫

ATM我的問題就出在玩家對象的負載值的過程,並在各自的班級寫它。

現在讓我們看看一些代碼:

以下你看到的我想用在數據庫中保存的值的方法。 這工作正常大氣壓,但我才意識到我仍然傳遞contentValues對象的「ID」,這是我沒有設定一個額外的價值 - 並計劃繼續通過這種方式 - 如自動增量。 任何想法如何在相應的工作?

public void savePlayer(Player player[]) { 


    for (int i = 0; i <= 3; i++) { 


    playerValues.put("ID", i); 
    playerValues.put("Name", player[i].getName()); 
    playerValues.put("HP", player[i].getHp()); 
    playerValues.put("Satisfaction", player[i].getsatisfaction()); 
    playerValues.put("Hygiene", player[i].isHygieneInt()); 
    playerValues.put("IsAlive", player[i].isAliveInt()); 

    } 
    db.insert("playertable", null, playerValues); 
} 

好了,請保持你的帽子,因爲這可能看起來有點像意大利麪條 - 負載方法:

public void loadPlayer() { 
    String[] namecolumn = { "Name" }; 
    String[] intcolumn = { "ID, HP, Satisfaction, Hygiene, IsAlive" }; 
    String[] namesToString = new String[4]; 


    for (int j = 0; j <= 3; j++) { 
     Cursor playerCursorName = db.query("playertable", namecolumn, "ID=" 
       + j, null, null, null, null); 
     namesToString = cursorToString(playerCursorName); 
     Resource.playerArray[j].setName(namesToString[j]); 
    } 

    for (int i = 0; i < 3; i++) { 
     int[] restToInt; 
     Cursor playerCursorInt = db.query("playertable", intcolumn, "ID=" 
       + i, null, null, null, null); 
     restToInt = cursorToInt(playerCursorInt, 4); 
     Resource.playerArray[i].setHp(restToInt[i]); 
     Resource.playerArray[i].setsatisfaction(restToInt[i]); 
     Resource.playerArray[i].setHygieneInt(restToInt[i]); 
     Resource.playerArray[i].setAliveInt(restToInt[i]); 

    } 
} 

是的,我知道這看起來很醜陋,但讓我解釋一下:

因爲有4個播放器對象,我計劃通過使用ID作爲標識符遍歷數據庫條目來一次只准確地獲取一行,並在Java類中寫入此對象的名稱和其他值,其中I想要在我的項目中管理它們。

注:同樣的問題自動增量比在這裏保存方法

另外,我打電話loadPlayer時,因爲被請求 指數-1得到CursorIndexOutOfBoundsException - 不是操作的結果數據庫導致錯誤?

是啊,這幾乎是它,我會爲你提供額外的代碼,如果提出要求,希望有人能幫助我

+0

您可能還想要發佈創建數據庫表的代碼,以及cursorToString和cursorToInt代碼。 – Rob

回答

0

您正在使用遊標在這裏略顯奇怪的方式。

光標的一點是要問的SQLite爲您做獲取數據的辛勤工作,和你的工作很簡單,就是使用遊標通過返回的值進行迭代。

首先,我想在這裏更改查詢表中,要求所有的值(也許把一些條件來約束你得到的是什麼),以確保那你的光標包含了所有你的價值觀。

然後,我將通過使用cursor.moveToNext()使用while循環(在循環前使用cursor.moveToPosition(-1))遍歷遊標的值。

更多信息請參見該API:

http://developer.android.com/reference/android/database/Cursor.html

至於自動增量的問題,據我記得你可以離開了ID,並使用db.insert()沒有那場和該數據庫將爲您提供一個ID。

你的加載方法不應該有同樣的問題,因爲加載時自動增量沒有意義,你只需回到數據庫中的內容即可。