调用Intent.getSerializableExtra()时出现奇怪的ClassCastException

时间:2016-10-05 14:01:38

标签: android

我有以下课程:

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

使用IdListService发送相同类型的对象(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>

1 个答案:

答案 0 :(得分:0)

我不建议使用序列化..使用Parcelable而不是

使你的IdList类可以Parcelable,然后你可以得到你的对象

intent.putParcelableArrayList(ids);

IdList ids = (IdList) intent.getParcelableArrayListExtra(IDS);

我希望这可能有所帮助,&#39;。