簡體   English   中英

如何在 Java 中的 Parcelable 類中打包對象類型

[英]how to parcel Object type in Parcelable class in Java

這個類如何實現可分割的權利。 我不能做包裹對象類型。字符串,雙,整數,..變量類型設置為對象類型。

public class MyClass implements Parcelable {
    public String Name;
    public Object Value; //variables type to set

    protected MyClass(Parcel in) {
        Name = in.readString();
        //Value = in.?
    }

    public static final Creator<MyClass> CREATOR = new Creator<MyClass>() {
        @Override
        public MyClass createFromParcel(Parcel in) {
            return new MyClass(in);
        }

        @Override
        public MyClass[] newArray(int size) {
            return new MyClass[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Name);
        //dest.
    }
}

可能我為時已晚,但這可能會幫助其他人尋找相同的東西。

由於 Object 類沒有實現 Parcelable,因此需要一種解決方法。 我克服這個障礙的一種方法是使用 GSON 並將序列化和反序列化為字符串和從字符串。

例如:

public class MyClass implements Parcelable {
    public String Name;
    public Object Value; //variables type to set

    protected MyClass(Parcel in) {
        Name = in.readString();
        Value = new Gson().fromJson(in.readString(), Object.class);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Name);
        dest.writeString(new Gson().toJson(Value));
    }

}
  • 寫入包裹時,使用 GSON 將對象(序列化)轉換為 JSON 字符串並將其作為字符串寫入包裹。
  • 從包裹讀取時,將包裹作為字符串讀取並再次使用 Gson 將其轉換(反序列化)為 Object 類。

Parcel文檔非常明確地說明了您可以做什么,這里有一些想法。

你有方法writeParcelable來做到這一點,但你不能打包一個Object因為Object沒有實現Parcelable

您需要定義一個為您的value實現Parcelableclass

public class MyClass implements Parcelable {
    public String name;
    public ParcelableValue value; //variables type to set
    ...

    
}

public class ParcelableValue implements Parcelable {
    ...
}

完整的實現見將 Parcelable 的子類寫到另一個 Parcel

你也有writeValue但這仍然有一些條件:

  • 任何實現 Serializable 的對象(但請參閱 writeSerializable(Serializable) 以了解注意事項)。 請注意,所有以前的類型都有相對高效的寫入包的實現; 必須依賴通用序列化方法效率低得多,應盡可能避免。*

有關完整列表,請參閱該方法的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM