我使用Preference Manager来保存一些整数和布尔值。 我创建了一个SettingsPreferences类:
public class SettingsPreferences {
private Context mContext;
public SettingsPreferences(Context context) {
this.mContext = context;
}
public boolean isNull() {
if (PreferenceManager.getDefaultSharedPreferences(mContext) == null) {
return true;
} else {
return false;
}
}
public void setBoolean(String name, boolean value) {
PreferenceManager.getDefaultSharedPreferences(mContext).edit()
.putBoolean(name, value).apply();
}
public void setInt(String name, int value) {
PreferenceManager.getDefaultSharedPreferences(mContext).edit()
.putInt(name, value).apply();
}
public boolean getBoolean(String name, boolean defaultValue) {
return PreferenceManager.getDefaultSharedPreferences(mContext)
.getBoolean(name, defaultValue);
}
public int getInt(String name, int defaultValue) {
return PreferenceManager.getDefaultSharedPreferences(mContext).getInt(
name, defaultValue);
}}
在Main类的onCreate方法中,我添加了默认值:
mSettingsPreferences = new SettingsPreferences(getApplicationContext());
if(mSettingsPreferences.isNull() == true) {
mSettingsPreferences.setBoolean("MAX", 1);
mSettingsPreferences.setBoolean("PROGRESS", 1);
}
在片段类中,我需要加载该数据并将其显示在进度条中。 这是代码:
Thread t = new Thread() {
public void run() {
try {
sleep(100);
SettingsPreferences sett = new SettingsPreferences(mContext);
mProgBar.setMax(sett.getInt("MAX", 2));
mProgBar.setProgress(sett.getInt("PROGRESS", 1));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
上下文定义我检查了他,进度条也是,但每次加载我的默认值。 有什么问题?
答案 0 :(得分:0)
使用此:
要初始化首选项,请使用以下命令:
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
String string = preferences.getString(key, defValue);
现在为Storind数据:
Editor editor = preferences.edit();
editor.putString(key,value);
editor.commit();
有关详细信息,请参阅此tutorial。
希望你明白。
答案 1 :(得分:0)
您必须调用Editor的commit()来应用更改
答案 2 :(得分:0)
我想你的isNull()总是返回false,因为:
PreferenceManager.getDefaultSharedPreferences(mContext)
不会返回null
,至少我从未见过这种情况。这样你永远不会初始化你的MAX和PROGRESS值,最后你会读取默认值。
您可以使用SharedPreferences.contains方法检查MAX是否存在,如果不存在则初始化。