java.lang.ClassCastException:java.lang.String无法强制转换为org.myapp.ui.MyClass

时间:2015-06-25 08:53:03

标签: java android expandablelistview classcastexception

我是android开发的新手,我遇到了一个我无法解决的问题。 我使用自定义ExpandableListView实施了Adapter。我有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无法强制转换为org.myapp.ui.MyClass

在此代码行中

  

MyClass selected =(MyClass)lv.getAdapter()。getItem(groupPosition);

如果有人知道为什么会这种情况发生(但只是在ExpandableListView扩展了几个群组之后),请告诉我。

1 个答案:

答案 0 :(得分:1)

取自oracle docs,ClassCastException抛出此异常表示代码已尝试将对象强制转换为不是实例的子类。例如,以下代码生成ClassCastException:

 Object x = new Integer(0);
 System.out.println((String)x);

在你的情况下,你试图将一个字符串转换为一个永远不会通过的自定义类,因为行lv.getAdapter().getItem(groupPosition)给出了String而不是MyClass Object。