共享首选项无法获得正确的默认值

时间:2017-02-08 09:45:09

标签: android session sharedpreferences

我创建了一个名为session的课程,我只是在那里维护我的所有共享偏好..

private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

现在从UI应用程序我调用此会话,我的所有变量都没有得到默认值,如..

public void setIsFirsTimeCall(boolean IsFirsTimeCall) {
        prefs.edit().putBoolean("IsFirsTimeCall", IsFirsTimeCall).commit();
        prefsCommit();
    }

    public boolean getIsFirsTimeCall() {
        return prefs.getBoolean("IsFirsTimeCall", true);
    }

所以当我调用getIsFirsTimeCall()时,它会给我错误

我不知道为什么会这样做 但是当我将这个项目复制并分享到其他PC时,它的工作正常 你有没有看过这种行为

1 个答案:

答案 0 :(得分:0)

我不知道这是否可以帮助您解决:

我认为你可以这样做:

public static void setIsFirsTimeCall(Context cntx, boolean IsFirsTimeCall) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    prefs.edit().putBoolean("IsFirsTimeCall", IsFirsTimeCall).commit();
    prefsCommit();
}

public static boolean getIsFirsTimeCall(Context cntx) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    return prefs.getBoolean("IsFirsTimeCall", true);
}

我已经在prefs类的构造函数中移动了Session的声明和定义,在每个需要它的方法中。每种方法都是static,因此您可以通过以下方式从Session类之外调用它们:Session.getIsFirsTimeCall(yourContext)等等。

也许您必须更改代码的行为,因为我不知道您的方法prefsCommit()是否可以成为static,否则您无法通过静态方法调用它。

希望它能帮到你