SharedPreferences - 无法将java.lang.Boolean强制转换为java.lang.String

时间:2017-05-10 14:33:58

标签: android sharedpreferences

我对一个不应该抛出的异常感到困惑。 错误如下:

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String

但是,我的代码不会尝试将布尔值转换为StringÔ_o 是否有可能编译器指示异常的来源是错误的?我正在使用华为

此部分触发例外:

if(SharedPreferencesManager.getUserMRZ(ScanEUID.this).equals("0")
&& SharedPreferencesManager.getUserDocumentIdFront(ScanEUID.this) != null 
&& SharedPreferencesManager.getUserDocumentIdBack(ScanEUID.this) != null)
{

相关方法如下

public static String getUserMRZ(Context context){
    return getSharedPreferences(context).getString(Constants.USER_HAS_MRZ, "0");
}
public static String getUserDocumentIdFront(Context context) {
    return getSharedPreferences(context).getString(Constants.USER_DOCUMENT_ID_FRONT, null);
}
public static String getUserDocumentIdBack(Context context) {
    return getSharedPreferences(context).getString(Constants.USER_DOCUMENT_ID_BACK, null);
}

setMRZ方法

public static void setUserMRZ(Context context, String has_mrz){
        final SharedPreferences.Editor editor = getSharedPreferences(context).edit();
        editor.putString(Constants.USER_HAS_MRZ, has_mrz);
        editor.apply();
}

4 个答案:

答案 0 :(得分:1)

检查你的安装人员,我遇到了同样的问题,我发现我错误地做了一个糟糕的副本/面食,并在设置器中使用Key作为布尔值的值...

答案 1 :(得分:0)

在我的情况下,我只是将get方法与Try Catch一起使用,并且有效!

答案 2 :(得分:0)

就我而言,我错误地将相同的共享首选项键用于不同的活动,例如 putString 和 putBoolean。虽然问题出现了。我使用了一个活动:

editor.putString("fezilalilquran", "on");

以及我使用的另一个活动:

editor.putBoolean("fezilalilquran", true);

所以,你看到,对于共享首选项中布尔值和字符串的相同关键字,当我想在 MainActivity 中获取布尔值时,因此这一行出现了强制转换异常:

boolean isTafseerOn = settings.getBoolean("fezilalilquran", true);

因此,替换设置活动中的行,来自:

editor.putString("fezilalilquran", "on");

到:

editor.putBoolean("fezilalilquran", true);

解决了我的问题:

快乐编码...... .

答案 3 :(得分:-1)