2013-07-29 26 views
0

我想存儲一個int在SharedPreferences。 int表示用戶在我的遊戲中使用的級別。在比賽開始前,該代碼被執行:SharedPreferences不遞增整數值 - Android

int level; 

    // Restore preferences 
    SharedPreferences settings = getSharedPreferences("level_SP", 0); 
    level = settings.getInt("currentLevel", 0); 
    if(level == 0) { 
     level++; 
    } 
    String str = Integer.toString(level); 
    title.setText(str); 

是從title.setText(str);輸出的文本是1

出於測試目的,無論用戶如何在遊戲中通過關卡。遊戲結束後,執行此代碼。

public void levels() { 

    // do calculations here to see if user passed level. 


    // Restore preferences 
    SharedPreferences settings = getSharedPreferences("level_SP", 0); 
    int level = settings.getInt("currentLevel", 0); 
    int newLevel = level++; 

    // We need an Editor object to make preference changes. 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("currentLevel", newLevel); 

    // Commit the edits! 
    editor.commit(); 
} 

然後,當用戶再次開始比賽,他們應該在2級。在這篇文章的頂部,這行代碼粘貼代碼:title.setText(str);應輸出2,但它仍然是說1 。這告訴我存儲在SharedPreferences中的int值不會遞增。

我的問題是,我「正確地」SharedPreferences?如果是,我是否「正確編輯」SharedPreferences?如果沒有任何一個,我做錯了什麼?

編輯

思想:不要被分散在我上面的代碼0意味着什麼?他們應該是別的東西嗎?

+2

'editor.putInt( 「currentLevel」,newLevel);'也許? – hexafraction

+0

「0」肯定意味着什麼。 [見這裏](http://developer.android.com/reference/android/content/Context.html#MODE_PRIVATE)。如果值不存在,則使用'getInt()'也是默認值 – codeMagic

回答

3

使用

editor.putInt("currentLevel", newLevel); 

代替。

當你達到新的水平時,你將它寫入與閱讀時不同的偏好。

+0

請在開始帖子中查看我的編輯。在您建議的編輯之後仍然存在不正確的輸出。 – Matt

2

它看起來像你想改變這個

editor.putInt("newLevel", newLevel); 

editor.putInt("currentLevel", newLevel); 

您正在創建一個新的SharedPreference,而不是編輯等植物學所以currentLevel從來沒有從1

+0

請在開始帖子中看到我的編輯。在您建議的編輯之後仍然存在不正確的輸出。 – Matt

0

這改變行是問題:

int newLevel = level++; 

您使用的是遞增運算符,這意味着這是一樣的:

int newLevel = level; 
level = level + 1; 

嘗試

int newLevel = level + 1;