我的应用程序应该读取此默认共享首选项文件中的布尔值:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<boolean android:key="Market"
android:defaultValue= "true" />
<boolean android:key="Farmacie"
android:defaultValue="true"/>
<boolean android:key="Musei"
android:defaultValue="true"/>
<boolean android:key="Ristoranti"
android:defaultValue="true"/>
<boolean android:key="Banche"
android:defaultValue="true"/>
<boolean android:key="Bar"
android:defaultValue="true"/>
<boolean android:key="Avvio"
android:defaultValue="true"/>
<boolean android:key="Background"
android:defaultValue="true"/>
</PreferenceScreen>
这是代码:
SharedPreferences pref = context.getSharedPreferences("myPref", Context.MODE_PRIVATE);
if(pref.getBoolean("Avvio", true))
{
Intent startServiceIntent = new Intent(context, LocationService.class);
context.startService(startServiceIntent);
}
当我在手机上运行时,一切似乎都运行良好但是当我在AVD(Nexus 5,6.0)上测试时,我得到了这个例外:
FATAL EXCEPTION: main
Process: so2.poifinder, PID: 1861
java.lang.RuntimeException: Unable to start receiver so2.poifinder.RunAtStartup: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
我还尝试将XML文件中的值保存为CheckBoxSharedPreference但没有任何更改。我想知道为什么模拟器在解析文件时返回一个String值,而我的智能手机返回一个布尔值。我应该将所有内容存储为字符串,以确保不会引发异常吗?
修改 这是非常愚蠢的事情:由于某种原因,在模拟器上还安装了旧版本的应用程序(具有相同的名称),这是提出异常的一个(因为我将值存储为XML文件中的EditText)。我只需要存储CheckBoxPreference而不是布尔值