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

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

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

问题及现象:

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

C# textBox框实现输入下拉列表

C# textBox框实现输入下拉列表

textBox框像百度搜索出现下拉列表的样式,如图: 重点就是要关注:AutoCompleteMode和AutoCompleteSource两种属性。 具体实现代码如下: 将此方法在frmLogin_Load事件里加载, private void bindTxt() {   ...

单片机IO输入输出配置

单片机IO输入输出配置

单片机IO简单的来说,分为输入和输出两种配置。而输入和输出里,又有一些更详细的配置。如下图所示: 输出配置,比较常见的有四种: (1) High-impedance output 高阻输出,可以简单的理解为悬空状态,它的输出随外界改变而改变。 (2) P-channel open drain...

Altium pcb文件过大

Altium pcb文件过大

问题描述: 一些Altium Designer设计的文件看上去板子小且走线也不多,但是保存后文件却比较大。 原因: 通常是在PCB中放置了非默认字体的字符。 在软件里面有一个默认的选项“Embed  TrueType Fonts inside PCB Doc...

Eclipse安装android 开发插件(ADT)

Eclipse安装android 开发插件(ADT)

如果是单独的eclipse,需要下载ADT。 (1)打开Eclipse, 在菜单栏上选择 help->Install New SoftWare 出现如下界面: 点击 Add按钮,出现如下界面 输入网址: https://dl-ssl.google.com/android/eclipse/...

Altium打印设置

Altium打印设置

Altium Designer打印有两种方法,一种是利用打印机或者虚拟打印机,将原理图或PCB打印出来;一种是利用其自带的Smart PDF功能将原理图或PCB打印成PDF文档。本文旨在讲述这两种方法。 一、利用打印机打印 首先,设置文档的打印信息。【File】->【Page Setup】...

Protel 99SE PCB 与SCH 的比较

Protel 99SE PCB 与SCH 的比较

这个功能主要是比较原理图和PCB的不同,当然如果你的PCB是由原理图Update而来的话,自然两者就是相同的。 第一步:将SCH生成Netlist. (Design /Greate Netlist) 第二步:将PCB生成Netlist. PCB 生成Netlist 的步骤如下: ① 打开PCB文件...

发表评论

访客

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