当前位置: 首页 > 面试题库 >

奇怪的例外:使用getBoolean时无法将String转换为Boolean

鲁宏爽
2023-03-14
问题内容

我收到一个非常奇怪的错误。我有2个活动。在这两者上,我通过
调用每个活动SharedPreferences来获得使用MODE_PRIVATE(如果重要)sp = getPreferences(MODE_PRIVATE);``onCreate()``sp.getBoolean(IntroActivity.SHOW_INTRO, true)

IntroActivity此工作正常。但是当我尝试主要活动时,我得到了

10-12 04:55:23.208: E/AndroidRuntime(11668): FATAL EXCEPTION: main
10-12 04:55:23.208: E/AndroidRuntime(11668): java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:242)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at com.lablabla.parkme.ParkMeActivity$2.onClick(ParkMeActivity.java:194)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.view.View.performClick(View.java:4084)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.view.View$PerformClick.run(View.java:16966)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.os.Handler.handleCallback(Handler.java:615)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.os.Looper.loop(Looper.java:137)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at android.app.ActivityThread.main(ActivityThread.java:4745)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at java.lang.reflect.Method.invokeNative(Native Method)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at java.lang.reflect.Method.invoke(Method.java:511)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-12 04:55:23.208: E/AndroidRuntime(11668):    at dalvik.system.NativeStart.main(Native Method)

我确保我不会String使用相同的键在中间放置某个地方

有任何想法吗?

谢谢!

编辑:一些代码:

//onCreate()
sp = getPreferences(MODE_PRIVATE);

// other method
boolean showIntro = sp.getBoolean(IntroActivity.SHOW_INTRO, true); // Exception is here
showIntroCheckBox.setChecked(showIntro);

如果很重要,则引发异常的代码在按钮的内部 onClick


问题答案:

如果该键曾经有一个字符串,即使是偶然,它也将保留在那里,直到您清除应用程序的数据或将其卸载。尝试将其卸载以查看是否仍然存在。



 类似资料:
  • 我遇到了奇怪的问题时,铸造小数到双倍。 以下代码返回true: 但是,当我将其强制转换为双倍时,它返回false: 这是记录在案的行为吗?当我被迫将decimal转换为Double时,我如何避免它? Visual Studio的截图: 将Math.round铸造为双倍me,结果如下: null 不幸的是,我不能在较小的项目中重现这个问题。我想埃里克的回答解释了原因。

  • 我从rest调用中获得了一个json,其格式为{“D1”:1,“D2”:1,“D3”:0,“D4”:1},它在db中存储为-{D1=1,D2=1,D3=0,D4=1}。 到目前为止我已经试过了,但没有成功- JSONParser parser=新的JSONParser();JSONObject json=(JSONObject)parser.parse(jsonString); 我想把这个json

  • 问题内容: 令人难以置信。为什么输出-124? 问题答案: 在Java中,an 是32位。A 是8 。 最原始的类型Java中的签名,,,,和long被编码在二进制补码。(类型为unsigned,并且sign的概念不适用于。) 在此数字方案中,最高有效位指定数字的符号。如果需要更多位,则将最高有效位(“ MSB”)简单复制到新的MSB中。 因此,如果你具有 并将其表示为 32位,则只需将1复制到左

  • 矩形填充的图像改变其比例(宽度和高度改变)。 这显示了转换前后的svg。 有没有人有办法解决这个问题?

  • 我有个方法 所以本质上是这样的: exec(这里的一些java魔术将str3转换为string[],然后将这个string[]传递给这个exec方法本身);

  • 我正在抛出一个JSON异常,我不知道为什么会抛出它。我已经看了几乎所有和我一样的问题,但我认为我的不同。因此,我从一个网页获得一个JSONArray,它发送的JSON是有效的(我用验证器检查了它)。在JSONArray上执行getJSONObject时引发异常。 这正是它所说的(个人信息被标出): 这是我的Java代码: 错误发生在我去的行: 任何帮助都非常感谢。