0

我在表格中有一个对象

public class Car implements Serializable, Parcelable {

    private static final long serialVersionUID = 1L;

    String name;
    String description;
    String brand;
    int speed;
    int brake;
    int asset;
    ArrayList<Uri> images;

    public Car(String name, String description, String brand, int speed,
            int brake, int asset, ArrayList<Uri> images) {
        super();
        this.name = name;
        this.description = description;
        this.brand = brand;
        this.speed = speed;
        this.brake = brake;
        this.asset = asset;
        this.images = images;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public int getBrake() {
        return brake;
    }

    public void setBrake(int brake) {
        this.brake = brake;
    }

    public int getAsset() {
        return asset;
    }

    public void setAsset(int asset) {
        this.asset = asset;
    }

    public ArrayList<Uri> getImages() {
        return images;
    }

    public void setImages(ArrayList<Uri> images) {
        this.images = images;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + asset;
        result = prime * result + brake;
        result = prime * result + ((brand == null) ? 0 : brand.hashCode());
        result = prime * result
                + ((description == null) ? 0 : description.hashCode());
        result = prime * result + ((images == null) ? 0 : images.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + speed;
        return result;
    }

    @Override
    public String toString() {
        return "Car [name=" + name + ", description=" + description
                + ", brand=" + brand + ", speed=" + speed + ", brake=" + brake
                + ", asset=" + asset + ", images=" + images + "]";
    }

    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

    }




}

但我不明白如何实现

public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub

}

public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

Eclipse 在添加implements Parcelable到类后需要

在 Android 网站上,示例还展示了一种方法

  public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

使我的整个班级(以及所有嵌套对象作为 ArrayList)“Parcelable”的正确方法是什么?

按照我到达构造函数的示例

public Car(Parcel in) {
   name= in.readString();
 description= in.readString();
speed=in.readInt();
...

images=in.readArrayList(??????????????????);
}

要传入的类加载器是readArrayList(..)什么?

4

1 回答 1

1

关于writeToParcel你应该做的方法:

public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(brand); //To write String
}

dest方法中的参数writeToParcel有很多其他方法来编写其他对象或原始类型。要将没有特定方法的其他对象放入对象中,如果您尝试编写的对象实现了,或者您尝试编写的对象实现了dest,您应该使用这些方法。writeParcelableParcelablewriteSerializableSerializable

之后,当您恢复 Parceable 对象时,您应该使用:

private void readFromParcel(Parcel in) {
    brand = in.readString(); //To read String
}

您必须按照您编写它们的相同顺序从 in 对象中读取值。

这段代码:

public static final Parcelable.Creator<Car> CREATOR = new Parcelable.Creator<Car>() {
         public Car createFromParcel(Parcel in) {
             return new Car(in);
         }
}

是需要调用的readFromParcel方法。您应该在您的类中添加一个构造函数,以便从上面的代码中调用。构造函数应如下所示:

public Car(Parcel in) {
   readFromParcel(in);
}

关于方法describeContents,Stackoverflow 上有一个很好的答案,here

总而言之,我从未见过任何使用这种方法的案例。该方法用于Parcel解析后释放资源,但我在网上没有找到任何解释它的好材料。您可能会一直返回 0。您可以在此处找到它的 Android 文档。

于 2012-10-17T23:05:45.063 回答