从Parcel读取或写入无法实现Parcelable的对象

时间:2015-04-28 14:00:56

标签: android parcelable

我有一个类似ObjectA的类,它实现了Parcelable。

total

ObjectB来自添加到项目的.jar文件,我无法为该类实现Parcelable接口。

public class ObjectA implements Parcelable {

       private ObjectB objB;
       private int mId;

}

所以我想知道是否有任何解决方案可以从包中读取或写入包裹用于ObjectB?

当然private ObjectA(Parcel in) { } @Override public void writeToParcel(Parcel dest, int flags) { } dest.writeParcelable无效,因为ObjectB无法实现Parcelable接口。

3 个答案:

答案 0 :(得分:0)

应该可以通过使用ObjectB的处理对象:

public class ObjectBHandler implements Parcelable {

private ObjectB b;


public ObjectBHandler(ObjectB b) {
    this.b = b;
}

public ObjectB getB() {
    return b;
}

public void setB(ObjectB b) {
    this.b = b;
}

/**
 * Describe the kinds of special objects contained in this Parcelable's
 * marshalled representation.
 *
 * @return a bitmask indicating the set of special object types marshalled
 * by the Parcelable.
 */
@Override
public int describeContents() {
    return 0;
}

/**
 * Flatten this object in to a Parcel.
 *
 * @param dest  The Parcel in which the object should be written.
 * @param flags Additional flags about how the object should be written.
 *              May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
 */
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeDouble(b.getValue());
    //...
}

}

答案 1 :(得分:0)

如果你的意思是你不能实现接口,因为它在jar中,那么可能有一个解决方案: 如果您对ObjectB的实现了解得足够好,并且您知道应该恢复的每个字段,并且如果ObjectB不是最终的,我猜您仍然可以这样做:

public class ParcelableObjectB extends ObjectB implements Parcelable {...}

答案 2 :(得分:0)

您可以通过getter从ObjectB获取属性并将其写入Parcel,当您从Parcel读取时 - 您可以创建新的ObjectB并通过setter进行设置。如果您没有访问权限和任何setter / getter,您可以使用反射。