我是android开发新手,遇到了一个无法解决的问题。
我使用自定义 Adapter
实现了 ExpandableListView
。我有 5 个组,每个组有 1 个子项目。每个组元素的数据类型为:org.myapp.ui.MyClass
。
我现在尝试在展开每个组元素时获取它的 MyClass
对象。为此,我使用 setOnGroupExpandListener
:
lv.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
public void onGroupExpand (int groupPosition){
MyClass selected = (MyClass)lv.getAdapter().getItem(groupPosition);
servId = selected.getServiceId();
// Do more stuff here
}
});
当我现在在模拟器中测试此代码时,我收到以下 ClassCastException
,但只有在扩展 ExpandableListView
中的某些组几次之后才出现。所以有几次它起作用了,然后突然它不起作用了,我得到了这个异常。
java.lang.ClassCastException: java.lang.String cannot be cast to org.myapp.ui.MyClass
在此代码行中
MyClass selected = (MyClass)lv.getAdapter().getItem(groupPosition);
如果有人知道为什么会发生这种情况(但只有在 ExpandableListView
中展开几个组之后),请告诉我。
最佳答案
摘自oracle文档,抛出ClassCastException表示代码试图将一个对象转换为它不是实例的子类。例如,以下代码生成 ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
在您的情况下,您正在尝试将字符串转换为自定义类,但该类永远不会通过,因为行 lv.getAdapter().getItem(groupPosition)
给出 String 而不是 MyClass Object。
关于java.lang.ClassCastException : java. lang.String 无法转换为 org.myapp.ui.MyClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045589/