Android 可串行化SparseArray<;自定义对象>;

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

我想用putExtra将我的数据从Activity1发送到Activity2

我的自定义对象实现可序列化:

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>