Проблема с созданием класса Parcelable в Android

Я пытаюсь создать класс Parcelable в Android, чтобы передавать ArrayList этих объектов между действиями. Я очень внимательно следил за примерами, найденными здесь, в StackOverflow (http://stackoverflow.com/questions/6201311/how-to-read-write-a-boolean-when-implementing-the-parcelable-interface) и в Android docs (http://developer.android.com/reference/android/os/Parcelable.html), но я продолжаю получать сообщение об ошибке в обязательном статическом поле CREATOR: Поле CREATOR нельзя объявлять статическим; статические поля могут быть объявлены только в типах static или верхнего уровня

Я получаю эту ошибку в своем классе, а также пример класса, вырезанный/вставленный непосредственно из документов Android. В моей ситуации должно быть что-то уникальное, о чем я не знаю....?? Мой класс указан ниже. Любые идеи?

Спасибо,

Брайан

public class ComplaintType implements Parcelable
{
    // class data
    private int groupID = 0;
    private int id = 0;
    private String description = "";
    private boolean checked = false; // does this complaint type apply to this patient?

    // constructors
    public ComplaintType() {}       
    public ComplaintType(int _groupID, String desc, int _id, boolean ckd) {
        this.groupID = _groupID;
        this.description = desc; 
        this.id = _id;
        this.checked = ckd;}

    // getters/setters
    public int getGroupID() {return groupID;}
    public void setGroupID(int _groupID) { this.groupID = _groupID;}
    public String getDesc() {return description;}
    public void setDesc(String desc) {this.description = desc;}
    public int getID() {return id;}
    public void setID(int _id) {this.id = _id;}
    public boolean isChecked() {return checked;}
    public void setChecked(boolean ckd) {this.checked = ckd;}

    // utility functions
    public String toString() {return this.description;}
    public void toggleChecked() {checked = !checked;}

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(groupID);
        dest.writeInt(id);
        dest.writeString(description);
        dest.writeByte((byte) (checked ? 1 : 0));  // convert byte to a boolean (1=true, 0=false)
    }

    public static final Parcelable.Creator<ComplaintType> CREATOR // <-- ERROR OCCURS HERE
     = new Parcelable.Creator<ComplaintType>() {

        public ComplaintType createFromParcel(Parcel in){
            ComplaintType complaint = new ComplaintType();
            complaint.setGroupID(in.readInt());
            complaint.setID(in.readInt());
            complaint.setDesc(in.readString());
            complaint.setChecked(in.readByte() == 1);  // store the boolean as a byte (1=true, 0=false)
            return complaint;
        }

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

}

person Bryan Greenway    schedule 01.02.2012    source источник


Ответы (1)


Похоже, ваш класс объявляется нестатическим внутри другого класса, поэтому ему не разрешено иметь статические элементы данных. Либо сделайте его классом верхнего уровня, либо объявите его статическим.

person Lawrence D'Oliveiro    schedule 01.02.2012
comment
Дох! Вы были совершенно правы; Я объявил его внутри другого класса. Сделал класс высшего уровня... проблема ушла. Я чувствую себя немного глупо сейчас. Спасибо за толчок, Лоуренс. - person Bryan Greenway; 01.02.2012