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

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

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

问题及现象:

尝试添加一个 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” 的相关文章

手表防水扫盲

手表防水扫盲

手表防水的误区 很多人觉得奇怪,当要购买水中活动可以使用的手表时,为何推荐他们防水100m以上的手表。“我一辈子也没潜水超过50m”,其实,这样的疑问不只存在于一般购买手表的消费者身上,前几年多数的手表销售员与修表师傅也都不甚在意这个问题,直到最近运动表的市场受到重视,才开始注意防水标示的区别,但...

DFC逻辑调频

DFC逻辑调频

2035机芯有个技术指标:DFC。如下图所示。 DFC,全称Digital Frequency Control,即逻辑调频。 我们知道,在所有的电子产品指标中,频率尤为重要,要想获得比较稳定的振荡,最广泛的就是使用石英振子,包括在手机和电脑里都有,石英手表更是如此,它用石英晶体的振荡来做时基,故...

Xcode查找函数(方法)调用及被调用

Xcode查找函数(方法)调用及被调用

参考资料:http://stackoverflow.com/questions/7145045/find-method-references-in-xcode 这个功能有的说是 Find Caller,有的说是Find references,有的说是Find Usages 直白的讲,就是我需要知道这...

IIS配置允许下载APK文件

IIS配置允许下载APK文件

MIME类型:application/vnd.android.package-archive...

BOS审批流如何查询出下一级待审核人信息

--根据名称查询出采购订单的类型ID,为1071 SELECT FID,* FROM ICClassType WHERE FName_chs Like '%采购订单_BOS%' --审批流对应的审核状态表的组合规则为:ICClassMCStatus+单据类型ID,审核记录表组合规则为:ICClass...

未能加载文件或程序集“file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports

首先我使用工具的信息为:Visual Studio 2010 ,水晶报表的版本为:13.0.0.99。 我想做的就是:使用VS2010中的WPF,将DataSet中的数据展示出来。(DataSet中的数据来自Oracle数据库) 但是我在运行的时候出现了这个问题: 未能加载文件或程序集“...

发表评论

访客

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