我对一个不应该抛出的异常感到困惑。 错误如下:
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();
}
答案 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)
查看文档
https://developer.android.com/reference/android/content/SharedPreferences.html#getString(java.lang.String,java.lang.String)
如果您的Constants.USER_HAS_MRZ值为布尔值,则应使用getBoolean
方法