Android 可串行化SparseArray<;自定义对象>;
我想用putExtra将我的数据从Activity1发送到Activity2 我的自定义对象实现可序列化:Android 可串行化SparseArray<;自定义对象>;,android,Android,我想用putExtra将我的数据从Activity1发送到Activity2 我的自定义对象实现可序列化: public class ARObjectCategory implements Serializable { private static final long serialVersionUID = 3128594851129501738L; public int id; public String name; public transient ARObjectCategory pa
public class ARObjectCategory implements Serializable {
private static final long serialVersionUID = 3128594851129501738L;
public int id;
public String name;
public transient ARObjectCategory parent;
public transient SparseArray<ARObjectCategory> children;
public transient Bitmap iconBitmap = null;
public String icon;
private boolean active = false;
public ARObjectCategory(int id, String name, ARObjectCategory parent) {
this.id = id;
this.name = name;
this.parent = parent;
this.children = new SparseArray<>();
}
public void addChild(ARObjectCategory child) {
children.append(child.id, child);
if (getActive())
child.setActive(true);
}
public final ARObjectCategory getChild(int index) {
return children.valueAt(index);
}
public final SparseArray<ARObjectCategory> getChildren() {
return this.children;
}
public final int getParentLast() {
ARObjectCategory parentTemp = this.parent;
while (parentTemp.parent != null) {
parentTemp = parentTemp.parent;
}
return parentTemp.id;
}
public final ARObjectCategory getChildById(int id) {
return children.get(id, null);
}
public final int getChildrenCount() {
return children.size();
}
public Boolean getActive() {
return this.active;
}
public void setActive(Boolean bool) {
this.active = bool;
}
public Bitmap getIconBitmap() {
return iconBitmap;
}
public void setIconBitmap(Bitmap iconBitmap) {
this.iconBitmap = iconBitmap;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
}
在调试模式下,我的对象看起来正常。SpraseArray获得了AROjcectCategory的对象
Activity2.java(接收器):
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
int selected=extras.getInt(“selected”,-1);
ARObjectCategory列表=(ARObjectCategory)extras.getSerializable(“测试”);
斯巴雷
最后,当我从对象中移除瞬态时
public transient ARObjectCategory parent;
public transient SparseArray<ARObjectCategory> children;
公共对象类别父对象;
公共短暂性麻雀儿童;
我的logcat上出现以下错误:
java.lang.RuntimeException:Parcelable遇到IOException
正在写入可序列化对象(名称=
com.ethos.ar.core.ARObjectCategory)……
原因:
java.io.NotSerializableException:android.util.SparseArray
正确的方法是什么,以将具有SpraseArray的对象发送到其他活动
提示:包裹不起作用:
dest.writeParcelable(this.children);
SparseArray<ARObjectCategory> cannot be converted to SparseArray<Object>
dest.writeparceable(此.children);
无法将SparseArray转换为SparseArray
谢谢当您使用瞬态修饰符时,该成员被排除在序列化过程之外。这就是您获得空对象的原因。当您删除瞬态修饰符时,您会收到一个异常,但为什么?这是因为“SparseArray”对象本身没有实现“Serializable”接口。记住,为了使对象可序列化,那么它的所有属性都必须实现“可序列化”接口。现在你能做什么?你应该实现Android的“可打包”接口,但是如何实现?如果你在使用“SparseArray”时遇到问题在可包裹过程中,可以将其包裹到另一个对象,然后在创建过程中重新创建原始“SparseArray”对象
public transient ARObjectCategory parent;
public transient SparseArray<ARObjectCategory> children;
dest.writeParcelable(this.children);
SparseArray<ARObjectCategory> cannot be converted to SparseArray<Object>