在我的Android应用中,我可以在应用更新时显示弹出窗口(基于versionCode
)。在弹出窗口中,我放了一个复选框,上面写着“别再告诉我”。当我点击它时,它将保存在sharedpref
versionCode
中,并且不再显示弹出窗口。
我遇到了一些奇怪的行为,当我保存新的Set<String>
时,它确实保存了它,但是当我的应用程序重新启动时,设置就丢失了。
Set<String> readAnnouncement = getReadAnnouncement(this);
readAnnouncement.add(String.valueOf(versionCode));
PreferenceManager.getDefaultSharedPreferences(this).edit().putStringSet(KEY_READ_ANN, readAnnouncement).apply();
如果我在readAnnouncement.add
上断点,我可以设置例如包含2个项目的列表。当我执行PreferenceManager.getDefaultSharedPrefer...
然后执行getReadAnnouncement(this);
时,值就在那里,一切都很好。
如果我重新启动应用并再次检查getReadAnnouncement(this);
,新值就会消失。
通过清除缓存,问题就消失了......为什么不能保存? SharedPreference
是否可能已满?
答案 0 :(得分:0)
试试这样。
import android.content.Context;
import android.content.SharedPreferences;
/**
* @author VIVEK
* This class deals in with setting Cache value for complete app.
*/
public class SharedPrefUtil{
/*Set Boolean value in shared preferences */
public static void setSharedPref(Context context, String key, boolean value) {
// save token in preference
SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
/*get Boolean value in shared preferences */
public static boolean getSharedPref(Context context, String key, boolean defaultVal) {
boolean prefToken = defaultVal;
SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0);
prefToken = sharedPreferences.getBoolean(key, false);
return prefToken;
}
/*Set String value in shared preferences */
public static void setSharedPref(Context context, String key, String value) {
// save token in preference
SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
/*get String value in shared preferences */
public static String getSharedPref(Context context, String key, String defaultVal) {
String value = defaultVal;
SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0);
value = sharedPreferences.getString(key, defaultVal);
return value;
}
public static void cleanSharedPrefFile(Context context) {
// save token in preference
SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
} // End of main class over here ...
现在你想在Shared Pref中设置一些值然后像这样设置
SharedPrefUtil.setSharedPref(MainActivity.this, "test", storeBuff);
现在,当您需要从共享Pref获取价值时,请像这样调用
SharedPrefUtil.getSharedPref(MainActivity.this, "test", "default value");
代替editor.commit()
,使用editor.apply()
<强>基础:强>
getDefaultSharedPreferences()使用默认的首选项文件名。此默认值是针对每个应用程序设置的,因此同一应用程序上下文中的所有活动都可以轻松访问它,如以下示例所示:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
偏好设置通常存储在/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
替代方法 - getSharedPreferences(名称,模式)需要指示特定的首选项(文件)名称和操作模式(例如private,world_readable等),这样可以更好地访问SharedPref文件。