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

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

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

问题及现象:

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

DokuWiki数据备份和迁移

DokuWiki数据备份和迁移

DokuWiki只需要备份以下选中的目录即可...

ESD保护方法

ESD保护方法

为了给电子系统提供ESD保护,可以从不同的角度来着手。 一种方法是在半导体芯片内建ESD保护架构。不过,日趋缩小的CMOS芯片已经越来越不足以承受进行内部2 kV等级的ESD保护所需要的面积。 其次,也可以在物理电路设计方面下功夫,较敏感的电路元件应该尽量远离通孔或接缝处,如果可能的话,线缆连接...

金蝶K/3修改帐套启用期间

不要乱修改 select * from t_SystemProfile where fkey = 'startyear' select * from t_SystemProfile where fkey = 'startperiod' 如果一个帐套已使用,要再修改会计期间个数或启用期间或会计期间开始...

二极管电容效应

二极管电容效应

二极管具有电容效应。它的电容包括势垒电容CB和扩散电容CD。 半导体二极管等效模型 1、势垒电容CB PN结内缺少导电的载流子,其电导率很低,相当于介质;而PN结两侧的 P区、N区的电导率高,相当于金属导体。从这一结构来看,PN结等效于一个电容器。 事实上,当PN结两端加正向电压时,PN...

VS2010:资源视图里看不到资源,提示在另一个编辑器中打开

VS2010:资源视图里看不到资源,提示在另一个编辑器中打开

问题: VS2010 MFC对话框编程 资源视图里面的内容看不到了,提示“在另一个编辑器中打开” 原因: 一般这种情况是打开了头文件中的resource.h造成的, 解决办法: 关闭resource.h,在资源视图中重新打开即可。 (双击.rc再双击)...

navigationController的pushViewController无效问题

参考资料:http://www.cocoachina.com/ask/questions/show/52842 我觉得这个问题很有代表性,尤其是小白,所以将重点内容摘抄过来了。 问题及操作过程: 1、新建一个 single View Application,会自动给我生成一个带xib的文件,就是默认...

发表评论

访客

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