【问题标题】:How to parcelable an object with an array of another object如何用另一个对象的数组打包一个对象
【发布时间】:2014-09-02 09:47:41
【问题描述】:

我正在尝试使用 Parcelable 对象在活动之间传递数据。使用主要变量我没有问题,但现在我需要传递另一个对象的数组,我不知道该怎么做。我正在寻找一些示例,但没有找到与我的问题类似的案例。

这是我的主体对象的源代码:

public class Quiz implements Parcelable {

    int event_id;
    String name;
    String business_unit;
    int functional_area_business;    // 0 unchecked, 1 checked
    int functional_area_support;    // 0 unchecked, 1 checked
    Answer [] list_answers;

    //GETTERS AND SETTERS
    ...
    //


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

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

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(event_id);
        dest.writeString(name);
        dest.writeString(business_unit);
        dest.writeInt(functional_area_business);
        dest.writeInt(functional_area_support);
        dest.writeArray(list_answers);
    }

    private Quiz(Parcel in) {
        event_id = in.readInt();
        name = in.readString();
        business_unit = in.readString();
        functional_area_business = in.readInt();
        functional_area_support = in.readInt();
    }
}

下一个班级。

public class Answer {

    int answer_id;
    String value;

}

如果有人能告诉我需要修改什么,我将不胜感激。

【问题讨论】:

  • 你有没有想过也为Answer实现Parcelable
  • 可以,但是不知道怎么读写数组中的数据
  • 我不明白你的意思只是为Answer 实现Parcelable 然后将Answer[] 写入带有writeParcelableArray() 的包裹。

标签: android arrays object parcelable


【解决方案1】:

使用 ArrayList 而不是 Array 并使 Answer 类 Parceable 然后将您的代码更新为以下内容:

  public class Quiz implements Parcelable {

        int event_id;
        String name;
        String business_unit;
        int functional_area_business;    // 0 unchecked, 1 checked
        int functional_area_support;    // 0 unchecked, 1 checked
        List<Answer >  list_answers;

        //GETTERS AND SETTERS
        ...
        //


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

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

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

    @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(event_id);
            dest.writeString(name);
            dest.writeString(business_unit);
            dest.writeInt(functional_area_business);
            dest.writeInt(functional_area_support);
            dest.writeTypedList(list_answers);
        }

    private Quiz(Parcel in) {
            event_id = in.readInt();
            name = in.readString();
            business_unit = in.readString();
            functional_area_business = in.readInt();
            functional_area_support = in.readInt();
            list_answers = new ArrayList<Answer>();
            in.readTypedList(list_answers , Answer.CREATOR);
        }
    }

这是可以解释的答案:

    public class Answer implements Parcelable  {

        int answer_id;
        String value;



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

            public Answer[] newArray(int size) {
                return new Answer[size];
            }
        };
       @Override
            public int describeContents() {
                return 0;
            }

        @Override
            public void writeToParcel(Parcel dest, int flags) {
                dest.writeInt(answer_id);
                dest.writeString(value);

    }
    private Answer(Parcel in) {
                answer_id = in.readInt();
                value = in.readString();
    }

    }

【讨论】:

  • dest.writeTypedList(list_answers);说 Answer 类需要实现 Parcelable。我也需要这样做吗?我认同。另一个错误是 in.readTypedList(list_answers , Answer.CREATOR);说它无法解析符号“CREATOR”。谢谢
  • 谢谢,抱歉,我正在吸收新概念。谢谢
  • 请提出另一个问题,为了传递数据而调用它就像任何其他教程一样,或者它有特殊处理?谢谢
  • Mohamed,当我尝试使用 Quiz quiz = new Quiz(); 创建一个类以在发送数据之前填充数据时IDE告诉我“测验中的测验(包裹)不能应用于()”。为什么?
  • 添加这个构造函数 public Quiz () {}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多