2015-04-23 60 views
0

我在我的Android應用程序中使用共享首選項。
它工作正常,但是當我重新啓動應用程序時,所有共享首選項值都消失了。重新啓動應用程序時清除共享首選項

爲什麼?

+6

SharedPreferences是隻有在應用程序緩存被刪除或應用程序重新安裝時纔會被刪除。你能分享你保存你的偏好的代碼嗎? – Knossos

回答

0

在偏好設定值:

// MY_PREFS_NAME - a static String variable like: 
// public static final String MY_PREFS_NAME = "MyPrefsFile"; 
    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
    editor.putString("name", "Elena"); 
    editor.putInt("idName", 12); 
    editor.commit(); 

從優先檢索數據:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("text", null); 
if (restoredText != null) { 
    String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. 
    int idName = prefs.getInt("idName", 0); //0 is the default value. 
} 

更多信息
http://developer.android.com/guide/topics/data/data-storage.html#pref http://developer.android.com/reference/android/content/SharedPreferences.html

+0

public static void SetStrPref(Context context,String Key,String Value) SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(Key,Value); editor.commit(); } – user2034953

+0

這是我用來保存共享首選項值的方法。我傳遞它的值和密鑰 – user2034953

+0

使用getSharedPreferences(MY_PREFS_NAME,MODE_PRIVATE)而不是getDefaultSharedPreferences(context); 看看 http://stackoverflow.com/questions/5946135/difference-between-getdefaultsharedpreferences-and-getsharedpreferences/6310080#6310080 – Assad

0

沒有代碼是diffucult來解決。無論如何,我想你在每次啓動應用程序之前都不要重新安裝它。所以可能你不會對共享偏好進行修改。從Saving Key-Value Sets

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt(getString(R.string.saved_high_score), newHighScore); 
editor.commit(); 

檢查你的代碼,以驗證commit()指令的存在。

0

1你是否在if語句中做了更多的事情?因爲你創建了兩個變量,它什麼都不做,在這個子句之後被破壞 第二你甚至可以分配「文本」首選項,而不是因爲你沒有加載,因爲你得到了默認的null返回

對不起,我以爲這是你的代碼,但它然後去assad

0

我認爲你沒有提交這些更改。在放置值之後必須應用SharedPreferences.Editor.commit()。提交確保值已保存。

+0

我已經使用comit()方法。每一件事情都很好,但當我重新啓動應用程序,然後所有的喜好都清晰 – user2034953

+0

plEASE分享你的代碼 – warlock

+0

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(Key,Value); editor.commit(); – user2034953

0

考慮這個公認的答案:

我不知道爲什麼,但它是由只把你的首選項的代碼異步任務裏面工作:

prefss = getSharedPreferences(ACCOUNT_PREFS_NAME, MODE_MULTI_PROCESS); 
new AsyncSave(favNamesList).execute(); 

private static class AsyncSave extends AsyncTask<Void, Void, Boolean> { 

String favNamesList; 

AsyncSave(String favNamesList) { 
    this.favNamesList = favNamesList; 
} 

@Override 
protected Boolean doInBackground(Void... params) { 
    prefss.edit().putString("favNamesList", strings).apply(); 
    return null; 
    } 
}