自定义SharedPreferences类
我是新来的android和学习。我的应用程序中有主题更改选项,用户可以从中切换主题。我正在使用一个全局变量来保存应用程序中的主题编号,但是当应用程序从背景中清除时,它正在遭受损失。所以我曾想过为此使用SharedPreferences。我找到了一种简单易用的方法来存储和检索SharedPreference从here。自定义SharedPreferences类
我的代码是像下面:
public class Keystore {
private static Keystore store;
private SharedPreferences SP;
private static String filename="Keys";
public static int theme=1;
private Keystore(Context context) {
SP = context.getApplicationContext().getSharedPreferences(filename,0);
}
public static Keystore getInstance(Context context) {
if (store == null) {
store = new Keystore(context);
}
return store;
}
public void put(String key, String value) {
SharedPreferences.Editor editor;
editor = SP.edit();
editor.putString(key, value);
editor.apply();
}
public String get(String key) {
return SP.getString(key, null);
}
public int getInt(String key) {
return SP.getInt(key, 0);
}
public void putInt(String key, int num) {
SharedPreferences.Editor editor;
editor = SP.edit();
editor.putInt(key, num);
editor.apply();
}
public void clear(){
SharedPreferences.Editor editor;
editor = SP.edit();
editor.clear();
editor.apply();
}
public void remove(){
SharedPreferences.Editor editor;
editor = SP.edit();
editor.remove(filename);
editor.apply();
}
}
而且按例如在原来的答案给定的,我想用它在我的活动类像下面获得价值
int theme= store.getInt("theme");
Log.d(getClass().getName(),"theme"+theme);
但它返回的是0而不是1.我还怀疑我已将类的默认值保存为1,例如public static int theme=1;
这是在SharedPreferences中保存默认值的正确方法吗?
感谢
您应该使用commit()
提交自己的喜好从这个编辑器的 SharedPreferences变回对象是编辑。这会自动执行 请求的修改,替换SharedPreferences中当前的任何内容。
public void putInt(String key, int num)
{
SharedPreferences.Editor editor;
editor = SP.edit();
editor.remove("key");
editor.putString("key", num);
editor.commit(); // IF commit() showing warning then use apply() instead .
editor.apply();
}
注意
如果你不关心的返回值和你使用这个从 应用程序的主线程,可以考虑使用适用()代替。
提交用于现在发出警告。建议使用apply而不是 –
@VivekMishra。 –
如果你想用默认值为1时,当你不保存在sharepreferance数据,那么你必须改变在你的方法一样
public int getInt(String key) {
return SP.getInt(key, 1);
}
它会为你工作来获取。
嗨!感谢您的好建议。我还有一个问题。在Example类中它使用了SP = context.getApplicationContext()。getSharedPreferences(filename,0);喜欢这个。如果我想要多键存储 – Priya
如需了解有关sharepreferance的更多信息,请参阅链接:https://www.journaldev.com/9412/android-shared-preferences-example-tutorial –
如果您喜欢我的答案,请接受它并upvote它。 :) –
您必须首先在共享偏好设置中保存值,以便稍后检索。要保存它使用下面的代码
store.putInt(your int value);
和共享的偏好相同检索它就像你正在做
int theme= store.getInt("theme");
你可以这样来做:
private void saveTheme()
{
SharedPreferences sharedpreferences = getSharedPreferences("filename here", Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.putInt("theme", 1);
editor.commit();
}
private int getTheme()
{
SharedPreferences sharedpreferences = getSharedPreferences("filename here", Context.MODE_PRIVATE);
sharedpreferences.getInt("theme",0);
}
您可以将它们添加在Utility类中,或者创建一个独立的PreferenceHelper类并使sharedPreference全局化。
希望它有助于!
您在共享偏好中保存了哪些值? –
@VivekMishra我用它像public static int theme = 1;为默认,并没有承诺任何保存到现在为止。 – Priya
如果你还没有保存任何值,那么你从共享首选项中获取什么?它将始终返回整数的默认值,即0 –