как правильно реализовать Parcelable с ArrayList?


у меня возникли проблемы с созданием моего класса Parcelable. Проблема в том, что я пытаюсь написать в посылку член в классе, который является

4 72

4 ответа:

вы почти получили его !

нужно сделать :

public void writeToParcel(Parcel out, int flags) {
    out.writeString(_mac);
    out.writeString(_pan);
    out.writeInt(_band);
    out.writeSerializable(_lqis);
    out.writeTypedList(_devices);
}

private ZigBeeNetwork(Parcel in) {
    _mac = in.readString();
    _pan = in.readString();
    _band = in.readInt();
    _lqis = (ArrayList<Integer>) in.readSerializable();
    in.readTypedList(_devices, ZigBeeDev.CREATOR);
}

вот и все!

для вашего списка целых чисел, вы также можете сделать:

out.writeList(_lqis);
_lqis = new ArrayList<>();
in.readList(_lqis Integer.class.getClassLoader());

Это должно работать.

в моем случае in.readTypedList(_devices, ZigBeeDev.CREATOR); Я NullPointerException on _devices. Поэтому я использовал это:

_devices = in.createTypedArrayList(ZigBeeDev.CREATOR);

вы должны использовать writeList (List l) для списка целых чисел и writeTypedList (List val) для списка ZigBeeDevices

в конструкторе вы должны использовать

_lqis = in.createTypedArrayList(ZigBeeDev.CREATOR);

а в "writeToParcel" используйте

out.writeTypedList(_lqis);