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 を拡張し、そのうちの 1 つを実装するカスタム クラスを作成する必要があります。これは、サポート タイプのドキュメントです。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 に答える