我在整个申请过程中使用defaultSharedPreferences()
。我在应用程序类中定义了一次,并在需要时使用它:
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;
}
我在此活动中使用:
public class StudentAddActivity extends ActionBarActivity {
...
private void attemptAdd() {
SharedPreferences sharedPref=((Itu)getApplication()).getSharedPreferencesItu();
int color=Itu.getStudentNameColor(sharedPref);
}
现在我要从我的另一项中删除所有值 :
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?或传递应用程序上下文而不是每个活动的上下文?或者我调用错误的功能删除?
UPDATE 1:我可以从我的Application类中删除它,但不能从我的Activities中删除它。为什么呢?
更新2:我可以通过直接访问变量从其他活动中删除它:
((Itu) getApplication()).sharedPreferencesFDefault.edit().clear().commit();
但是如果我通过我的静态函数得到sharedPreference变量,我无法清除它,为什么?
答案 0 :(得分:0)
我已将public static SharedPreferences sharedPreferencesFDefault;
更改为public SharedPreferences sharedPreferencesFDefault;
,现在clear()
正常工作。事情是将static
sharedPreference从Application类转换为Activity类的static
变量。
当我们用另一个static
变量初始化static
变量时,我仍然不知道会发生什么。您可以关注该问题here。