我在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时。我不知道为什么它认为它是一个不同的对象。
发布于 2013-02-01 07:53:12
原因很简单,因为TreeNode既不是Serializable也不是可打包的。因此,您需要创建一个自定义类来扩展TreeNode并将其传递到其中之一,以便使数据扁平化。下面是支持类型的document。TreeNode不在那里。
发布于 2013-02-01 07:45:15
公共静态最终创建器,如果可以,它将需要具有相同的构造函数态射,而且因为它不是同一个包,您需要首先向上转换为一个对象,例如
//....
Object treeinst = (Object) BinarySearchTree[x];
TreeNode treet = (TreeNode) treeinst;
return treet;
https://stackoverflow.com/questions/14637014
复制相似问题