首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Parcelable麻烦

Android Parcelable麻烦
EN

Stack Overflow用户
提问于 2013-02-01 07:25:26
回答 2查看 149关注 0票数 2

我在android中实现Parcelable类时遇到了问题。

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

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

这就是错误

代码语言:javascript
运行
复制
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时。我不知道为什么它认为它是一个不同的对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 07:53:12

原因很简单,因为TreeNode既不是Serializable也不是可打包的。因此,您需要创建一个自定义类来扩展TreeNode并将其传递到其中之一,以便使数据扁平化。下面是支持类型的document。TreeNode不在那里。

票数 0
EN

Stack Overflow用户

发布于 2013-02-01 07:45:15

公共静态最终创建器,如果可以,它将需要具有相同的构造函数态射,而且因为它不是同一个包,您需要首先向上转换为一个对象,例如

代码语言:javascript
运行
复制
//....
Object treeinst = (Object) BinarySearchTree[x];
TreeNode treet = (TreeNode) treeinst;
return treet;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14637014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档