【问题标题】:Write to parcelable from code从代码写入parcelable
【发布时间】:2018-04-03 20:01:05
【问题描述】:

我想创建数据并将其写入包裹。我想做以下的原因是调试。我想在一个位置编写一些简洁的代码来启用应用程序中的某个流程。

我想修改此方法以返回我创建的对象:

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 类并添加构造函数或设置方法。 MyMessage 应该保持完全相同,我想通过使用 parcel 构造 MyMessage 对象来填充其messagefield。

我试过这个:

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 有一个空消息。我哪里错了?

【问题讨论】:

  • 请显示 MyMessage.CREATOR.createFromParcel() 实现
  • @divideandconquer.se 已编辑问题

标签: android javabeans parcelable parcel


【解决方案1】:

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

必须使用以下命令重置 Parcel 的数据位置: parcel.setDataPosition(0);

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多