从代码写入 parcelable

Write to parcelable from code

我想创建数据并将数据写入包裹。我想执行以下操作的原因是调试。我想在一个位置编写一些简洁的代码,以启用应用程序中的特定流程。

我想将此方法修改为 return 我创建的对象:

public MyMessage getMyMessage() {
        return myMessage;
}

MyMessage 是一个 bean,定义为:

@Bean
public class MyMessage implements Parcelable {

    @Optional
    private String message;

    public MyMessage() {
    }

    public MyMessage(Parcel in) {
        message = in.readString();
    }

    public String getMessage() {
        return message;
    }

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

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

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

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

}

我不想编辑 MyMessage class 并添加构造函数或 setter 方法。 MyMessage 应该保持完全相同,我想通过构建一个带有包裹的 MyMessage 对象来填充它的 message 字段。

我试过这个:

public MyMessage getMyMessage() {
    android.os.Parcel parcel = android.os.Parcel.obtain(); // TODO
    parcel.writeString("message is this");
    return MyMessage.CREATOR.createFromParcel(parcel);
    //return new MyMessage(parcel);
}

但是 .writeString() 似乎没有修改包裹,调试器分离,我无法单步执行它。最终结果是 MyMessage bean 有一个空消息。我哪里错了?

可能与 Parcel write/read doesn't work in AndroidTestCase -why? 重复:

One must reset the Parcel's data position with: parcel.setDataPosition(0);