DefaultSharedPreferences()不清除()值

时间:2015-04-13 08:57:05

标签: android sharedpreferences

我在整个申请过程中使用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变量,我无法清除它,为什么?

1 个答案:

答案 0 :(得分:0)

我已将public static SharedPreferences sharedPreferencesFDefault;更改为public SharedPreferences sharedPreferencesFDefault;,现在clear()正常工作。事情是将static sharedPreference从Application类转换为Activity类的static变量。

当我们用另一个static变量初始化static变量时,我仍然不知道会发生什么。您可以关注该问题here