当前位置:首页 > 技术心得 > 正文内容

Android MultiSelectListPreference, java.lang.String cannot be cast to java.util.Set

xjtudll9年前 (2017-06-26)技术心得10180

问题及现象:

尝试添加一个 MultiSelectListPreference到设置界面,MultiSelectListPreference基本代码如下:

<MultiSelectListPreference

android:title="@string/title"

android:summary="@string/message"

android:key="pref_foobar"

android:defaultValue="@array/empty_array"

android:entries="@array/fooArray"

android:entryValues="@array/fooValues" />


array如下:

<resources>

<string-array name="fooArray">

<item>Foo</item>

<item>Bar</item>

</string-array>

<string-array name="fooValues">

<item>foo_value</item>

<item>bar_value</item>

</string-array>

<string-array name="empty_array"/>

</resources>


编译后警告如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject/.SettingsActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Set

以下是Activity的代码:

public class SettingsActivity extends Activity {
private static final String TAG_SETTINGS_FRAGMENT = "SETTINGS_FRAGMENT";
@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

if (savedInstanceState == null) {            getFragmentManager().beginTransaction() .replace(android.R.id.content, new PreferenceFragment(), TAG_SETTINGS_FRAGMENT).commit(); } }

public static class PreferenceFragment extends android.preference.PreferenceFragment{

public PreferenceFragment() { //required }

@Override public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);            addPreferencesFromResource(R.xml.preferences); } }}

 


 

原因:

某个Key的属性之前是String,后来改成了Set,且在调试的过程中曾经存储过数据,所以才会冲突。

It feels like you already have a plain String preference under this key on your device or emulator. Try completely uninstalling and reinstalling the app, or using "Clear Data" for the app in its screen in Settings, to wipe out your existing SharedPreferences.


解决办法:

1、清除该APP数据;

2、卸载APP再重装;

 

参考资料:http://stackoverflow.com/questions/26179178/android-multiselectlistpreference-java-lang-string-cannot-be-cast-to-java-util

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/459/

标签: Android
分享给朋友:

“Android MultiSelectListPreference, java.lang.String cannot be cast to java.util.Set” 的相关文章

金蝶K3中用户组和用户的权限导入导出

金蝶K3中用户组和用户的权限导入导出

帐套管理-帐套-用户引入引出...

物料新增工艺路线后是否会更新到物料计划资料中的工艺路线?

https://vip.kingdee.com/questions/141197/answers/166759 解决方案: 【概述】 当工艺路线新增时,选择缺省状态是“是”时,工艺路线审核以后会自动更新到物料的工艺路线。...

Quartus CPLD未使用引脚处理

Quartus CPLD未使用引脚处理

未使用的引脚可以设置成输出,三态输入,弱上拉输入等。Quartus 8.0默认设置成输出低电平(As output driving ground)。 引脚设置方法: 【Assignments】->【Setting】->【Device】->【Device and Pin Option...

Xcode Warning: The Copy Bundle Resources build phase contains this target's Info.plist file

Xcode Warning: The Copy Bundle Resources build phase contains this target's Info.plist file

问题: 编译时,提示The Copy Bundle Resources build phase contains this target's Info.plist file 原因: Info.plist被添加到了Copy Bundle Resources里,原因不明。如图所示: 解决...

系统能识别光盘,双击打不开

操作系统:Windows 7 现象:自己刻录的一张光盘,放进光驱后,能识别光盘,但是双击后无任何反应。 原因: 这个问题是Win7的一个功能导致的,启用将可能导致无法浏览打开光盘目录,只能加载自动运行程序或自动播放媒体文件,如果没有则无法使用,禁用此功能即可解决问题。 解决方法: 1...

Itunes搜索——找正版免费软件的利器

Itunes搜索——找正版免费软件的利器

一直以为ipad不越狱没啥游戏可玩的,其实不然,itunes store大把的免费正版软件   打开iTunes,选择菜单上的 Store ,再选择“搜索”:  然后,先选择“应用软件”,例如,想找所有免费的游戏,而且是IP...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。