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

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

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

问题及现象:

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

监听viewcontroller进入后台

首先,要说明的是: ViewWillDisappear在进入后台的时候 不会 被触发 监听Home键进入后台: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResig...

ios ble:didDiscoverPeripheral没有回调

参考资料: http://stackoverflow.com/questions/26320578/diddiscoverperipheral-not-been-called-after-advertising-another-ios-device 问题: 启动scan之后,didDiscoverP...

两个路由器连接设置

两个路由器连接在一起,有两种方式,为表述方便,以A、B代替路由器名称 一、A路由器当路由器用,B路由器当交换机用 组网方式:A的LAN口接B的任意一个LAN口,A和B的其余LAN口接PC,两台路由器最多可供6台PC上网。 A路由器的设置方式就不说了,重点是要开启DHCP,且要设置自动分配的IP范围...

老管3DJ6有可以直接替换的TO-92封装的型号吗?

老管3DJ6有可以直接替换的TO-92封装的型号吗?莫非这是一只无可替代的型号? 许多几十年前的“天价”三极管如今都有了性能更高的替换型号了,比如901x现在只卖几分钱一个。 但3DJ场效应管,好像没有发现可以直接替换的新型号。在网上搜索了一下,也没得到比较肯定的答案。 哪位...

android 停止Handler

mHandler.removeCallbacks(mRunnable); 或者 mHandler.removeMessages(what); mHandler.removeCallbacksAndMessages(null) 参数为null的话,会将所有的Callbacks和Messages全部清除...

Multisim交流分析显示光标值

Multisim交流分析显示光标值

multisim的交流分析本质是交流扫描分析,即扫描频率,输出节点电压等参量。 在分析窗口中设置输出变量,在频率参数标签中设置频率参数(起始频率、结束频率等) 这是默认的交流分析的结果图 是没有标注任何数值的。要是想知道扫描点的相关数值,必须开光标。 右键,选择【显示光标】 拖动光标(图中...

发表评论

访客

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