Tôi gặp khó khăn khi xếp lớp Parcelable
. Vấn đề là, tôi đang cố gắng ghi vào bưu kiện một thành viên trong lớp là một ArrayList<Parcelable>
đối tượng. Các ArrayList
là Serializable
, và các đối tượng ( ZigBeeDev
) trong danh sách là Parcelable
.
Đây là mã liên quan:
package com.gnychis.coexisyst;
import java.util.ArrayList;
import java.util.Iterator;
import android.os.Parcel;
import android.os.Parcelable;
public class ZigBeeNetwork implements Parcelable {
public String _mac; // the source address (of the coordinator?)
public String _pan; // the network address
public int _band; // the channel
ArrayList<Integer> _lqis; // link quality indicators (to all devices?)
ArrayList<ZigBeeDev> _devices; // the devices in the network
public void writeToParcel(Parcel out, int flags) {
out.writeString(_mac);
out.writeString(_pan);
out.writeInt(_band);
out.writeSerializable(_lqis);
out.writeParcelable(_devices, 0); // help here
}
private ZigBeeNetwork(Parcel in) {
_mac = in.readString();
_pan = in.readString();
_band = in.readInt();
_lqis = (ArrayList<Integer>) in.readSerializable();
_devices = in.readParcelable(ZigBeeDev.class.getClassLoader()); // help here
}
public int describeContents() {
return this.hashCode();
}
public static final Parcelable.Creator<ZigBeeNetwork> CREATOR =
new Parcelable.Creator<ZigBeeNetwork>() {
public ZigBeeNetwork createFromParcel(Parcel in) {
return new ZigBeeNetwork(in);
}
public ZigBeeNetwork[] newArray(int size) {
return new ZigBeeNetwork[size];
}
};
//...
}
Tôi đã đánh dấu hai điểm "// help here" để hiểu cách ghi đúng vào bưu kiện và cách tái tạo lại nó. Nếu ZigBeeDev
được Parcelable
(kiểm tra đúng cách), tôi phải làm thế nào để làm điều này đúng cách?
ZigBeeDev.Creator
nên cóZigBeeDev.CREATOR
. Lần nào tôi cũng gặp lỗi cho đến khi tôi nhận ra rằng có hai người sáng tạo khác nhau mà tôi có thể sử dụng trong dự án của riêng mình.