2014-01-12 27 views
3

因此,我有兩個活動在我的應用程序 - StartActivity和SettingsActivity。使用GetDefaultSharedPreferences - SharedPref值重置活動

在StartActivity(啓動活動) - 我從SharedPref中讀取關卡和聲音值。如果他們沒有設置,我將它們設置爲默認值,否則我將找到的值。以下代碼位於StartActivity的OnCreate內部。

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

String levelValue = sharedPref.getString(getString(R.string.levelpref), null); 
String soundValue = sharedPref.getString(getString(R.string.soundpref), null); 

if(levelValue == null) 
{ 
    String levelDefaultValue = (getResources().getStringArray(R.array.level))[0]; 
    String soundDefaultValue = (getResources().getStringArray(R.array.sound))[0]; 

    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putString(getString(R.string.levelpref), levelDefaultValue); 
    editor.putString(getString(R.string.soundpref), soundDefaultValue); 
    editor.apply(); 
} 

在SettingsActivity,我有一個保存按鈕,對聲音和級別保存新設定值

public void saveSettings(View v) 
{ 
     SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString(getString(R.string.levelpref), level); 
     editor.putString(getString(R.string.soundpref), sound); 
     editor.apply(); 
} 

現在,當我啓動我的應用程序 - StartActivity啓動 - 認爲,對於SharedPref值聲音和電平沒有設置,因此分配一個默認值。接下來,我將轉到設置活動,設置聲音和級別的新值並保存(從調試器中,我可以驗證是否設置了新值)。

但是,當我回到我的StartActivity時,SharedPref值由於某種原因重置爲之前設置的默認值。從SO討論中,我讀到使用getDefaultSharedPreferences應該保留活動之間的值。

有什麼問題是什麼想法?

民SDK版本:11 目標-SDK版本:18

+0

打印密鑰。你確定R.string.soundpref等是相同的嗎?你有機會進口R.android嗎? –

+0

是的,我指的是兩個地方的同一把鑰匙。 – Hari

+0

發佈更多的代碼。 API級別?在提交首選項之後並在讀取之前添加調試打印 - 它們的順序是否正確?清理你的項目。 –

回答

0

,我認爲你有兩個不同的SharedPrefrence作爲方法工作,你使用的相關上下文和語境都在2活性不同,或者你不保存您的編輯器目的。也許這個代碼可以幫助您:

SharedPreferences setting = getSharedPreferences("HomeSetting", 0); 
    Editor editor = setting.edit(); 
    editor.putBoolean(SERVICE_ON_VALUE, false); 
    editor.commit(); 

希望對大家有用:)

+0

我嘗試了editor.commit()和editor.apply()。不幸的是,似乎都沒有工作 – Hari

+0

所以使用這個SharedPrefences。我使用它類似於你的需要,並且工作得很好! – FxRi4

+0

沒有他正確使用默認的共享首選項 –

1

我發現我不得不重新打開PreferenceManager.getDefaultSharedPreferences(本)中的onResume每次或之後可能changings檢查。

相關問題