DefaultSharedPreferences() 不清除 () 值
DefaultSharedPreferences() does not clear() values
我在整个申请过程中使用 defaultSharedPreferences()
。我在我的 Application class 中定义了一次,并在需要时使用它:
public class Itu extends Application {
public static SharedPreferences sharedPreferencesFDefault;
@Override
public void onCreate() {
sharedPreferencesFDefault = PreferenceManager.getDefaultSharedPreferences(this);
}
public static SharedPreferences getSharedPreferencesItu(){
return sharedPreferencesFDefault;
}
public static int getStudentNameColor(SharedPreferences sharedPref){
int color = sharedPref.getInt("studentNameColor", -1);
if (color == -1) {
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("studentNameColor", 0);
editor.commit();
color = sharedPref.getInt("studentNameColor", 0);
}
....
return color;
}
我用这个Activity:
public class StudentAddActivity extends ActionBarActivity {
...
private void attemptAdd() {
SharedPreferences sharedPref=((Itu)getApplication()).getSharedPreferencesItu();
int color=Itu.getStudentNameColor(sharedPref);
}
现在我想从另一个 activity 中删除所有值,这不起作用:
public class CourseListActivity extends ActionBarActivity{
public static SharedPreferences sharedPreferencesFDefault;
...
sharedPreferencesFDefault = ((Itu) getApplication()).getSharedPreferencesItu();
sharedPreferencesFDefault.edit().clear().commit();
}
在我调用 sharedPreferencesFDefault.edit().clear().commit();
之后,我仍然看到我的 "studentNameColor"
值存在于 defaultSharedPreferences
。
可能是什么问题?使用 defaultSharedPreferences 而不是 sharedPreference?或者传递应用程序上下文而不是每个 activity 的上下文?或者我调用了错误的删除函数?
更新 1: 我可以从我的应用程序 class 中删除它,但不能从我的活动中删除它。为什么?
更新 2: 我现在可以通过直接访问变量从另一个 activity 中删除它:
((Itu) getApplication()).sharedPreferencesFDefault.edit().clear().commit();
但是如果我通过静态函数获取 sharedPreference 变量,我无法清除它,为什么?
我已将 public static SharedPreferences sharedPreferencesFDefault;
更改为 public SharedPreferences sharedPreferencesFDefault;
,现在 clear()
有效。问题是从应用程序 class 获取 static
sharedPreference 到 Activity class.
的 static
变量
我仍然不知道当我们用另一个 static
变量初始化 static
变量时会发生什么。你可以关注那个问题 here.
我在整个申请过程中使用 defaultSharedPreferences()
。我在我的 Application class 中定义了一次,并在需要时使用它:
public class Itu extends Application {
public static SharedPreferences sharedPreferencesFDefault;
@Override
public void onCreate() {
sharedPreferencesFDefault = PreferenceManager.getDefaultSharedPreferences(this);
}
public static SharedPreferences getSharedPreferencesItu(){
return sharedPreferencesFDefault;
}
public static int getStudentNameColor(SharedPreferences sharedPref){
int color = sharedPref.getInt("studentNameColor", -1);
if (color == -1) {
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("studentNameColor", 0);
editor.commit();
color = sharedPref.getInt("studentNameColor", 0);
}
....
return color;
}
我用这个Activity:
public class StudentAddActivity extends ActionBarActivity {
...
private void attemptAdd() {
SharedPreferences sharedPref=((Itu)getApplication()).getSharedPreferencesItu();
int color=Itu.getStudentNameColor(sharedPref);
}
现在我想从另一个 activity 中删除所有值,这不起作用:
public class CourseListActivity extends ActionBarActivity{
public static SharedPreferences sharedPreferencesFDefault;
...
sharedPreferencesFDefault = ((Itu) getApplication()).getSharedPreferencesItu();
sharedPreferencesFDefault.edit().clear().commit();
}
在我调用 sharedPreferencesFDefault.edit().clear().commit();
之后,我仍然看到我的 "studentNameColor"
值存在于 defaultSharedPreferences
。
可能是什么问题?使用 defaultSharedPreferences 而不是 sharedPreference?或者传递应用程序上下文而不是每个 activity 的上下文?或者我调用了错误的删除函数?
更新 1: 我可以从我的应用程序 class 中删除它,但不能从我的活动中删除它。为什么?
更新 2: 我现在可以通过直接访问变量从另一个 activity 中删除它:
((Itu) getApplication()).sharedPreferencesFDefault.edit().clear().commit();
但是如果我通过静态函数获取 sharedPreference 变量,我无法清除它,为什么?
我已将 public static SharedPreferences sharedPreferencesFDefault;
更改为 public SharedPreferences sharedPreferencesFDefault;
,现在 clear()
有效。问题是从应用程序 class 获取 static
sharedPreference 到 Activity class.
static
变量
我仍然不知道当我们用另一个 static
变量初始化 static
变量时会发生什么。你可以关注那个问题 here.