我正在尝试通过 Intent 将 MyCustomObject 类型的对象发送到另一个 Activity 。我知道,要使类 Parcelable,我应该做 public class MyCustomObject implements Parcelable ,但我不确定自定义对象数组如何在 Parcelable 中工作。这是我到目前为止所得到的。另外,我是否需要让 Search 类也实现 Parcelable?

这是我更新的答案 我现在在执行 intent.getParcelableExtra(search) 时得到一个空对象。也许我没有正确创建搜索数组?

public class MyCustomObject implements Parcelable{
    public Search search[];

    public MyCustomObject(Parcel in){
        in.readArray(MyCustomObject.class.getClassLoader());
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags){
        dest.writeArray(search)
    }

    public static final Parcelable.Creator<MyCustomObject> CREATOR = new Parcelable.Creator<MyCustomObject>(){
        @Override
        public MyCustomObject createFromParcel(Parcel source){
            return new MyCustomObject(source);
        }

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

    public static class Search implements Parcelable{
        public int rank;
        public String title;
        public String[] imageURL;

        public Search(Parcel in){
            rank = in.readInt();
            title = in.readString();

            String[] url = new String[4];
            in.readStringArray(url);
            url = imageURL
        }

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

        @Override
        public void writeToParcel(Parcel dest, int flags){
            dest.writeInt(rank);
            dest.writeString(title);
            dest.writeStringArray(imageURL);
        }

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

        @Override
        public Search createFromParcel(Parcel source){
            return new Search(source);
        }

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

    }
}

最佳答案

几件事。首先,您的 Search 对象也需要实现 Parcelable。接下来,您需要创建一个名为 CREATOR 的静态字段,它实现 Parcelable.Creator。这将有一个名为 createFromParcel 的方法,该方法返回 MyCustomObject 的一个实例。这是您从宗地中读取数据并创建 MyCustomObject 的新实例的地方。这与 writeToParcel 本质上是相反的。这一切也适用于搜索,因为您必须使其实现 Parcelable。总之:

  • 使搜索实现 Parcelable
  • 实现 Search.writeToParcel
  • 在 Search 中创建一个名为 CREATOR 的静态字段,它实现 Parcelable.Creator
  • 实现 Search.CREATOR 的 createFromParcel 方法
  • 在 MyCustomObject 中创建一个名为 CREATOR 的静态字段,用于实现 Parcelable.Creator
  • 实现 MyCustomObject.CREATOR 的 createFromParcel 方法
  • 关于android - 在 Android 中创建一个自定义的 Java 对象 Parcelable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7559241/

    10-12 04:10