2

我无法在 android 中实现 Parcelable 类。

我遇到的问题是我收到的是 BinarySearchTree 不能转换为 TreeNode。

当我打印出我收到的类型是什么时,它说树节点,所以我不完全确定问题是什么。

这是错误

01-31 18:13:50.986: E/AndroidRuntime(1059): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.discoverycalendar/com.discoverycalendar.DiscoveryMainMenu}: 
java.lang.ClassCastException: com.DiscoveryUtils.BinarySearchTree cannot be cast to com.DiscoveryObjects.TreeNode

private TreeNode  root = null;


@Override
public int describeContents() {

    return 0;
}

public BinarySearchTree(Parcel in){

    this();
    root = (TreeNode) in.readValue(TreeNode.class.getClassLoader());
    in.readStringList(treeCont);
    in.readStringList(treeAsString);
}

public static final Creator<BinarySearchTree> CREATOR = new Creator<BinarySearchTree>() {

    public BinarySearchTree createFromParcel(Parcel source) {

        return new BinarySearchTree(source);
    }

    public BinarySearchTree[] newArray(int size) {

        return new BinarySearchTree[size];
    }
};

@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeValue(root);
    dest.writeStringList(treeCont);
    dest.writeStringList(treeAsString);
}

我收到的错误是当我尝试将返回值转换为 TreeNode 时。我不知道为什么它认为它是一个不同的对象。

4

2 回答 2

0

简单的原因是TreeNode不是Serializable或 Parcelable。因此,您需要创建一个自定义类来扩展 TreeNode 并执行其中之一以展平数据。这是支持类型的文档。TreeNode 不存在。

于 2013-01-31T23:53:12.173 回答
-1

public static final Creator,如果可能的话,它需要具有相同的构造函数态射,而且因为它不是同一个包,你需要首先向上转换到一个对象,例如

//....
Object treeinst = (Object) BinarySearchTree[x];
TreeNode treet = (TreeNode) treeinst;
return treet;
于 2013-01-31T23:45:14.910 回答