android - 在 Android 中制作自定义 java 对象 Parcelable

标签 android parcelable parcel

我正在尝试通过 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。总结:

  • 使搜索实现可打包
  • 实现 Search.writeToParcel
  • 在 Search 中创建一个名为 CREATOR 的静态字段,它实现了 Parcelable.Creator
  • 实现Search.CREATOR的createFromParcel方法
  • 在名为 CREATOR 的 MyCustomObject 中创建一个实现 Parcelable.Creator 的静态字段
  • 实现MyCustomObject.CREATOR的createFromParcel方法

关于android - 在 Android 中制作自定义 java 对象 Parcelable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559241/

相关文章:

android - 设置 Android 键盘上的返回键

java - 无法将 Parcelable 放入 bundle 中

android parcelable字符串数组

使用 OpenGL 处理 Android 相机帧

android - 扩充布局 DSLV 库时出错

android - 错误 : Failed to resolve: com. google.firebase :firebase-crash:17. 2.2

使用 Kotlin @Parcelize 解码时的 Android 10 BadParcelableException ClassNotFoundException

java - 使用 AIDL 在两个进程之间传输 Parcelable

java - 包裹:无法编码值 android.util.Pair

android - 打包Parcel时出现空指针异常