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

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

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

问题及现象:

尝试添加一个 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://www.xjtudll.cn/Exp/459/

标签: Android
分享给朋友:

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

提交到app store时,提示ERROR ITMS-90478 ,ERROR ITMS-90062错误

提交到app store时,提示ERROR ITMS-90478 ,ERROR ITMS-90062错误

ios app提交到AppStore时,提示ERROR ITMS-90478 ,ERROR ITMS-90062,如下图所示: 看字面意思,应该是我提交的版本比之前上架的版本要低。 但是,之前的版本是V1.03,现在是V1.1.0。好像版本要高,并没有低。 然而,到AppStore构建版本那里查看...

C#获取文件全路径、目录、扩展名、文件名称

class Program     {         static void Main(string[] args)       &nbs...

堪称一绝的“IO口扫键”法

堪称一绝的“IO口扫键”法

在做项目(工程)的时候,我们经常要用到比较多的按键,而且IO资源紧张,于是我们就想方设法地在别的模块中节省IO口,好不容易挤出一两个IO口,却发现仍然不够用,实在没办法了就添加一个IC来扫键。一个IC虽然价格不高,但对于大批量生产而且产品利润低的厂家来说,这是一笔不菲的开支! 那,我们能不能想到比较...

OKI单片机——ML610Q4XX 串口

OKI单片机——ML610Q4XX 串口

串口配置过程: ① 配置接收引脚,选择P02或者P42 ② IO口配置成串口模式 ③ 选择时钟 ④ 配置成传输模式或者接收模式 ④ 配置校验方式、停止位和波特率 ⑤ 配置中断状态 void UART_Init(void) { //----配置IO口----// //TXD P43DIR = 0;/...

光耦应用笔记

1、光耦的简介及分类 光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦。它是以光为媒介来传输电信号的器件,通常把发光器(红外线发光二极管LED)与受光器(光敏半导体管)封装在同一管壳内。当输入端加电信号时发光器发出光线,受光器接受光线之后就产生光电流,从...

金蝶K3-销售价取价规则什么?按什么优先级?

【系统逻辑】销售价格取值规则如下:1、销售价格取值优先顺序:价格政策-基本价格政策-物料参考售价。2、不同价格政策下,同一物料的价格,按照销售价格政策优先级取值,优先级数字越小越优先;3、相同价格政策下,同一物料存在多个条目时,优先取符合条件最后审核的价格条目。...

发表评论

访客

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