Android应用程序开发、共享首选项和布尔问题

Android应用程序开发、共享首选项和布尔问题,android,sharedpreferences,Android,Sharedpreferences,我正在开发一个Android应用程序,我正在使用一个开关让用户将自己指定为男性或女性 我想使用SharedReferences保存它们输入的值。我用简单的按钮和文本成功地做到了这一点,但是当我尝试对交换机执行此操作时,会导致应用程序崩溃 导致崩溃的行是SharedReferences.getBoolean(“性别”,false) 以下是代码(这是我的加载部分): 每隔一次SharedReferences.getString()都能成功工作 谢谢 拉里 这是我将所有代码更改为一行后的日志: gen

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

我想使用SharedReferences保存它们输入的值。我用简单的按钮和文本成功地做到了这一点,但是当我尝试对交换机执行此操作时,会导致应用程序崩溃

导致崩溃的行是
SharedReferences.getBoolean(“性别”,false)

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

每隔一次
SharedReferences.getString()
都能成功工作

谢谢

拉里

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

genderSwitch.setChecked(sharedPreferences.getBoolean(“性别”,false))

编辑:

以下是如何使用编辑器保存布尔值:

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

我从logcat中了解到,您试图将“性别”检索为布尔值,但它存储为字符串

所以它抛出了一个异常,查看日志猫

原因:java.lang.ClassCastException:java.lang.String无法转换为java.lang.Boolean 在android.app.SharedReferencesImpl.getBoolean上(SharedReferencesImpl.java:261)

尝试此操作以检查此类项是否存在,然后检索字符串并将其转换为布尔值:

Boolean-genderBoolean;
if(SharedReferences.contains(“性别”)){
String temp=SharedReference.getString(“性别”、“假”);
genderBoolean=Boolean.parseBoolean(temp);
}
否则{
genderBoolean=假;
}

现在,我建议,在某种程度上,如果您将价值保存到共享偏好中,您可以这样做:

SharedReference.edit().putBoolean(“锁定”,true).commit()

在检索部分,请使用以下命令:

if(SharedReferences.contains(“性别”)){
genderBoolean=SharedReferences.getBoolean(“性别”,false)
}
否则{
genderBoolean=假;
}


但是,如果您不想修改任何内容,请使用第一个选项,但我建议您使用第二种方法。

删除if/else语句并替换此行:genderSwitch.setChecked(genderBoolean);使用genderSwitch.setChecked(SharedReferences.getBoolean(“性别”,false));如果它仍然崩溃,请发布日志猫,并显示如何将布尔值放入共享prefs。添加日志猫,thanksIt应该可以工作,请清理代码,然后重试。除非您将布尔字段“性别”作为字符串放入共享首选项中。你是这样写SharedReferences的吗?SharedReferences.edit().putBoolean(“性别”,true.apply()@我补充了我是如何保存它的
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)
private void savePreferencesB(String key, Boolean value) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, value);
        editor.apply();
    }