【发布时间】:2026-02-20 00:45:02
【问题描述】:
我正在开发一个应用程序,其中我将值保存在 SharedPrefernces 中。我创建了一个单独的类 SharedPreferenceforAlarm 用于设置 或获取存储在 SharedPreferences 中的值。要设置或获取存储的值,我从不同的活动调用类对象。
我面临的问题是值没有正确保存。
例如(见代码):
alarmisSet 的默认值:False
alarmName 的默认值:无警报
如果 iam 从任何活动调用 setAlarm(this, true),则 iam 得到的日志是 “SHAREDPREFERENCES,警报已设置:false;”
如果 iam 调用 setAlarmName(),情况相同,默认 alarmName 打印的不是 iam 给出的那个。
值得一提的是,我为应用的首次运行创建了一个 setupHelp 活动。当我安装应用程序并运行它时,setuphelp 活动正在运行。第二次,setuphelp 没有显示。这意味着 SharedPreferencesforAlarm 类的 setFirstRun() 和 getFirstRun() em> 工作正常,但之后就不行了。
还值得一提的是,将 alarmisSet 的默认值设置为 false 和 alarmName 到 No Alarm,Logcat 显示正确显示输出。
PS:我在不同的电脑上检查过,但还是没有成功。
/*****************************Shared Preference Class**************************************//
public class SharedPreferencesforAlarm {
public static final String TAG = "SHAREDPREFERENCES" ;
public static final String MyPREFERENCES = "Alarm" ;
public static final String firstRun="Firstrun";
public static final String alarmisSet="alarmisSet";
public static final String alarmName="alarmName";
public SharedPreferencesforAlarm() {
super();
}
public void setFirstRun(Context context) {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor=mySettings.edit();
editor.putBoolean(firstRun, true);
editor.commit();
}
public Boolean getFirstRun(Context context) {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
return(mySettings.getBoolean(firstRun, false));
}
public void setAlarm(Context context, Boolean value) {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor=mySettings.edit();
editor.putBoolean(alarmisSet, value);
editor.commit();
Log.d(TAG,"Alarm is Set:"+value);
}
public Boolean getAlarm(Context context, Boolean value) {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
return(mySettings.getBoolean(alarmisSet, value));
}
public void setAlarmName(Context context,String name) {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
editor = mySettings.edit();
editor.putString(alarmName, name);
editor.commit();
Log.d(TAG, "Alarm Name:" + name);
}
public String getAlarmName() {
SharedPreferences mySettings;
mySettings = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
return(mySettings.getString(alarmName, null));
}
}
/***********CODE FOR CALLING THE SHARED PREFERENCE CLASS FROM ANY ACTVITY*****************************//
SharedPreferencesforAlarm sharedPreferences = new SharedPreferencesforAlarm(); //creating the object
sharedPreferences.setAlarm(this, true);
sharedPreferences.setAlarmName(this, alarmName.getText().toString()); //alarmName is a TextView
【问题讨论】:
-
我看不出这段代码有什么问题。请在活动中发布您的完整代码。
-
我正在从许多活动中调用 SharedPreference 类。我通过在活动的 onCreate() 中调用构造函数来创建对象。创建对象后,通过该对象调用 setAlarm() 或 getAlarm() 函数。
-
我已经更新了问题,它将给出更清晰的图片。
标签: android android-activity sharedpreferences