2015-03-25 111 views
0

我有2個共享首選項,應用程序重新啓動後似乎沒有保存。以下是我的代碼。SharedPreferences不保存android

這是我的閃屏創建的共享偏好:

SharedPreferences settings = getSharedPreferences("App", 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("LEVEL", 1); 
    editor.putInt("COINS", 100); 
    editor.commit(); 

當應用程序進入到下一個活動,我玩了一下與存儲的值和一切似乎這個活動裏面來工作。我把這個活動創造

sharedPreferences = getApplicationContext().getSharedPreferences("App", 0); 
    curlevel = sharedPreferences.getInt("LEVEL", 0); 
    goldcoins = sharedPreferences.getInt("COINS", 0); 

然後我更新accoring下列函數的值:

public static void setPushEnabledFlag(Context context, String key ,int newValue) { 
    SharedPreferences prefs = context.getSharedPreferences("App", 0); 
    Editor prefsEditor = prefs.edit(); 
    prefsEditor.clear(); 
    prefsEditor.putInt(key, newValue); 
    prefsEditor.commit(); 
} 

值恢復到第一個活動的原始值每次我重新啓動應用程序。

任何幫助?

編輯1:

我只有2 activites,飛濺和遊戲,在第一活動我要創建的共享偏好和分配2的默認值對硬幣和LEVEL。在遊戲活動中,如果應用程序第一次初始化時,我應該得到默認值,它應該保留共享首選項中保存的值。

回答

0

避免使用clear()方法:

public static void setPushEnabledFlag(Context context, String key ,int newValue) { 
    SharedPreferences prefs = context.getSharedPreferences("App", 0); 
    SharedPreferences.Editor prefsEditor = prefs.edit(); 
    //prefsEditor.clear(); 
    prefsEditor.putInt(key, newValue); 
    prefsEditor.commit(); 
} 
+0

感謝您的答覆但是,值仍然恢復到orininals應用程序重新啓動後:( – 2015-03-25 00:10:37

0

這是有道理的,閃屏活動代碼將運行每次啓動應用程序的時間。

所以你的SharedPreferences總是被覆蓋在飛濺。解決方案是將代碼移到不同的地方。

+0

如果我加入這其中有很多相同的計算活動,這將是一樣的,每次他們將獲得默認值? – 2015-03-25 00:28:18

+0

我需要更多地瞭解你的流程,因爲初始是初始活動,你認爲哪一個是第一個和第二個活動,請編輯你的問題更詳細,以便我們整理出來 – meda 2015-03-25 00:37:32

0

編輯代碼如下代碼

sharedPreferences = getSharedPreferences("App", context. MODE_PRIVATE); 
    curlevel = sharedPreferences.getInt("LEVEL", ""); 
    goldcoins = sharedPreferences.getInt("COINS", ""); 
+0

It將不允許我用第二個參數「」用戶getInt?它建議我使用getFloat來代替? – 2015-03-25 00:35:40

0

我看到檢查是sharedpreferences存在與否後,它的作品!

 SharedPreferences sharedPrefs = getSharedPreferences("App", 0); 
    SharedPreferences.Editor ed; 
    if(!sharedPrefs.contains("initialized")){ 
     ed = sharedPrefs.edit(); 

     //Indicate that the default shared prefs have been set 
     ed.putBoolean("initialized", true); 

     //Set some default shared pref 
     ed.putInt("LEVEL", 1); 
     ed.putInt("COINS", 100); 

     ed.commit(); 
    } 
+0

不幸的是它再次崩潰:( – 2015-03-25 00:22:23