我有以下课程:
public class IdList extends ArrayList<Long> {
public IdList() {
super();
}
public IdList(Collection<Long> idCollection) {
super(idCollection);
}
}
我使用以下代码将此类的实例传递给IntentService
:
final Intent intent = new Intent(this, MyService.class);
intent.putExtra(MyService.IDS, ids);
startService(intent);
我使用以下代码在Service
:
IdList ids = (IdList) intent.getSerializableExtra(IDS);
这导致以下ClassCastException
:
java.lang.ClassCastException:java.util.ArrayList无法强制转换为 my.package.IdList
BUT
使用IdList
从Service
发送相同类型的对象(LocalBroadcastManager
)并在onReceive()
中提取(通过相同的方法,通过调用{{ 1 {} getSerializableExtra()
并投射到Intent
)完美无缺地。
没有IdList
抛出。
为什么会这样?这是Android中的错误吗?
编辑:
我正在使用以下方法来实例化我的ClassCastException
对象:
IdList
public IdList getIds() {
return selectedIds.isEmpty() ? null : new IdList(selectedIds);
}
是selectedIds
个对象。
EDIT2:
我不是在寻找解决方法。我想知道为什么当HashSet<Long>
通过广播发送时,相同的代码完全正常,为什么在通过Intent
调用时它会抛出ClassCastException
。 / p>
答案 0 :(得分:0)
我不建议使用序列化..使用Parcelable而不是
使你的IdList类可以Parcelable,然后你可以得到你的对象
intent.putParcelableArrayList(ids);
IdList ids = (IdList) intent.getParcelableArrayListExtra(IDS);
我希望这可能有所帮助,&#39;。