gpt4 book ai didi

Android App开发,Shared Preferences getBoolean问题

转载 作者:行者123 更新时间:2023-11-30 02:02:05 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,我正在使用一个开关让用户将自己指定为男性或女性。

我想使用 sharedPreferences 来保存他们输入的值。我已经使用简单的按钮和文本成功完成了此操作,但是当我尝试对开关执行此操作时,我导致应用程序崩溃。

导致崩溃的行是 sharedPreferences.getBoolean("gender",false)

这是代码(这是我的加载部分):

private void loadSavedPreferences() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String firstnameString = sharedPreferences.getString("firstname", "FirstName");
FirstName.setText(firstnameString);
String lastnameString = sharedPreferences.getString("lastname","LastName");
LastName.setText(lastnameString);
String mailString = sharedPreferences.getString("email","Email");
Email.setText(mailString);
String postalcodeString = sharedPreferences.getString("postalcode","PostalCode");
PostalCode.setText(postalcodeString);
Boolean genderBoolean;
if (sharedPreferences.getBoolean("gender", false)) {
genderBoolean = true;
}
else {
genderBoolean = false;
}
genderSwitch.setChecked(genderBoolean);
}

所有其他 sharedPreferences.getString() 都成功运行。

谢谢,

拉里

这是我将所有代码更改为一行后的 logcat:

genderSwitch.setChecked(sharedPreferences.getBoolean("gender", false));

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mobiquitynetworks.www.mobiquitymall/com.mobiquitynetworks.www.mobiquitymall.preferences_page}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
at android.app.ActivityThread.access$900(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:261)
at com.mobiquitynetworks.www.mobiquitymall.preferences_page.loadSavedPreferences(preferences_page.java:55)
at com.mobiquitynetworks.www.mobiquitymall.preferences_page.onCreate(preferences_page.java:42)
at android.app.Activity.performCreate(Activity.java:5451)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
            at android.app.ActivityThread.access$900(ActivityThread.java:169)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5487)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)

编辑:

下面是我如何使用 EDITOR 保存 bool 值:

private void savePreferencesB(String key, Boolean value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putBoolean(key, value);
editor.apply();
}

最佳答案

我从 logcat 中了解到,您正在尝试将“性别”检索为 bool 值,但它存储的是一个字符串。

所以它抛出一个异常,看日志cat。

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:261)

试试这个来检查这样的项目是否存在,然后检索字符串并将其转换为 bool 值:

bool 性别 bool 值;
如果(sharedPreferences.contains(“性别”)){
String temp = sharedPreference.getString("性别", "假");
genderBoolean = Boolean.parseBoolean(temp);
}
别的 {
性别 bool =假;
}

现在,我会部分建议您将值保存到 Shared Preference,您可以这样做:

sharedPreference.edit().putBoolean("locked", true).commit();

在检索部分,使用这个:

if (sharedPreferences.contains("gender")) {
genderBoolean = sharedPreferences.getBoolean("性别", false)
}
别的 {
性别 bool =假;
}

但是,如果您不想修改任何东西,请使用第一种方式,但我建议您采用第二种方式。

关于Android App开发,Shared Preferences getBoolean问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com