java - 使用 Parcel 对象写入数据

标签 java android parcelable

我在尝试弄清楚如何使用 Parcel 对象写入数据时遇到了一些困难,我是这个类的新手,我一直在做一些研究,但不明白如何做,这是可包裹类

public class Item implements Parcelable {

private String iItemName;
private String iType;
private String iSerial;
private String iRetailer;
private String iLocation;
private String iValue;
private String iDescription;

public Item()  {
    super();
}

public Item (Parcel in) {
    super();
    this.iItemName = in.readString();
    this.iType = in.readString();
    this.iSerial = in.readString();
    this.iRetailer = in.readString();
    this.iLocation = in.readString();
    this.iValue = in.readString();
    this.iDescription = in.readString();
}

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

@Override
public void writeToParcel(Parcel parcel, int flags) {
    parcel.writeString(getItemName());
    parcel.writeString(getType());
    parcel.writeString(getSerial());
    parcel.writeString(getRetailer());
    parcel.writeString(getLocation());
    parcel.writeString(getValue());
    parcel.writeString(getDescription());
}

public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>(){

    @Override
    public Item createFromParcel(Parcel source) {
        Item item = new Item();
        item.iItemName = source.readString();
        return item;
    }

    public Item [] newArray(int size) {
        return new Item[size];
    }
};

public String getItemName() {
    return iItemName;
}

public void setItemName(String iItemName) {
    this.iItemName = iItemName;
}

我的问题是,如果我想创建一个新的 Item 对象,我需要将 Parcel 对象作为参数发送,对吗?所以我可以做类似的事情:

String name = getString("name");

// how to add name to the parcel object?

Parcel parcel;

Item i = new Item(parcel);

最佳答案

不,你不需要。您的对象现在有两个构造函数。您应该像平常一样创建对象并调用它的 setter 方法。您应该避免手动创建地 block ,而应使用 writeValue()readValue() 方法。

// Create an item as usual
Item myItem = new Item();
myItem.setItemName("name");

// Add it to a parcel
Parcel parcel = Parcel.obtain();
parcel.writeValue(myItem);

// Read the item back from the parcel
parcel.setDataPosition(0);
Item newItem = (Item) parcel.readValue(Item.class.getClassLoader());

// When you are finished with the parcel
parcel.recycle();

通常,当从Intent接收到Parcel时,您会从Parcel创建一个对象。在这种情况下,您将执行以下操作。

// Create intent
Intent intent = new Intent(this, MyActivity.class);
Bundle itemBundle = new Bundle();
itemBundle.putParcelable("item_extra", myItem);
intent.putExtras(itemBundle);
startActivity(intent);

// In the activities onCreate(Bundle savedInstanceState)
Item myItem = getIntent().getParcelableExtra("item_extra");

关于java - 使用 Parcel 对象写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433002/

相关文章:

android - YouTube Android Player API 在新的 YouTube 版本中抛出 "BadParcelableException ClassNotFoundException when unmarshalling: asc"

java - 如何获取用户在listview上单击的项目的唯一id

类成员变量需要 Java "volatile"吗?

android - 如何使用 Intent.putExtra 和 Parcel 将对象从一个 Activity 发送到另一个?

javascript - HTML textarea onselect 不适用于移动设备

java - 如何使用 View 计算面积、周长和半径

android - 类型参数不在其范围内 预期 : Parcelable Found: String

java - Android Studio Box2D 循环工作时出现问题

java - 当我的类已经扩展了一个类时,如何实现 TimerTask?

android - webview 打开特定域的站点