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