2015-04-23 144 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; 
    } 
} 
相关问题