【发布时间】:2015-05-10 01:09:38
【问题描述】:
我想发送一个类的对象 - 的子对象
ArrayList<ArrayList<Double>>
到一个 Android 活动。这是我的课:
package cz.honza.backpropagation.network.trainingset;
import java.io.Serializable;
import java.util.ArrayList;
import cz.honza.backpropagation.network.parser.Csv;
public class TrainingLineBase extends ArrayList<ArrayList<Double>> implements TrainingLine, Serializable {
private static final long serialVersionUID = -2777317734401540881L;
@Override
public String getEditorType() {
return Csv.SIMPLE;
}
}
它实现了可序列化,所以我可以简单地使用
public Intent putExtra (String name, Serializable value)
用于启动该 Activity 的 Android Intent 方法。然后我尝试在 Activity 的 onCreate 方法中读回它
getIntent().getSerializableExtra(INTENT_EXTRA_DATA);
看似简单,但行不通。我没有得到我的 TrainingLineBase 类的对象,我得到了
ArrayList<ArrayList<Double>>
它是继承树中的父级。它保存与原始 TrainingLineBase 相同的数据。所以看起来序列化并不能很好地工作。传输了真实数据,但没有传输类类型。
这是 Android 中的错误还是我做错了什么?
更新:有一种非常简单的方法可以获得有效的解决方案。我可以将继承更改为所有权。 neww 类很好地序列化/反序列化:
public class TrainingLineBase implements TrainingLine, Serializable {
public ArrayList<ArrayList<Double>> mData;
// ....
【问题讨论】:
-
您是否尝试将其转换为 TrainingLineBase,或检查
getIntent().getSerializableExtra(INTENT_EXTRA_DATA) instanceof TrainingLineBase的结果? -
你如何放置数据?
-
转换到 TrainingLineBase 会导致 ClassCastException,因为您不能将父级转换为子级。
-
放数据: Intent i = new Intent(getContext(), TrainingLineBaseActivity.class); i.putExtra(TrainingLineBaseActivity.INTENT_EXTRA_DATA, (Serializable)getItem(position)); // 在调试器中检查它确实是 TrainingLineBase 的实例 ((Activity)getContext()).startActivityForResult(i, position);
标签: android inheritance android-intent android-activity serializable