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

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

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

问题及现象:

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

CorelDraw12启动时图标一闪而过

现象: Coreldraw12启动时,图标一闪而过,无法打开cdr文件。每次启动都如此。 之前一直是可以使用的,在某次强制关机后,就发现软件不能使用了。 临时解决办法: 网上说的各种方法都试过了,都不行。目前只探索出了两种临时可行的办法。 方法一:每次使用coreldraw12前卸载c...

Quartus II:从verilog代码生成原理图框图(bsf文件)

Quartus II:从verilog代码生成原理图框图(bsf文件)

首先说下,为什么用这个功能。 个人习惯顶层用原理图方式绘制,底层模块用verilog代码实现,这样的话在顶层原理图里可以清晰的知道要干啥,比代码更直观。 方法: File ->Create/Update -> Create Symbol Files for Current File 生...

手表防水扫盲

手表防水扫盲

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

OKI单片机——ML610Q4XX 串口

OKI单片机——ML610Q4XX 串口

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

keil warning C316:unterminated conditionals

用Keil 4写程序时遇到这个问题:Warning C316:unterminated conditionals Google了一番,基本上找到了原因: 类似XX.C(99):warning C316:unterminated conditionals这种警告的话,表明XX.c文件有一个凌乱的条件编...

C# 用NPOI操作读写2007版的excel错误

现象: 导出Excel2003正常,导出Excel2007莫名其妙的错误。 C#用NPOI操作读写类网上很多了,在此不重复。 我引用的dll:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll, 解决方法:还需要引用ICSharpCode.SharpZipLib...

发表评论

访客

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