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

У меня возникли проблемы с созданием classа Parcelable . Проблема в том, что я пытаюсь записать в партию член в classе, который является объектом ArrayList . ArrayList является Serializable , а объекты ( ZigBeeDev ) в списке являются Parcelable .

Вот соответствующий код:

 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 _lqis; // link quality indicators (to all devices?) ArrayList _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) in.readSerializable(); _devices = in.readParcelable(ZigBeeDev.class.getClassLoader()); // help here } public int describeContents() { return this.hashCode(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public ZigBeeNetwork createFromParcel(Parcel in) { return new ZigBeeNetwork(in); } public ZigBeeNetwork[] newArray(int size) { return new ZigBeeNetwork[size]; } }; //... } 

Я отметил два пятна «// help here», чтобы понять, как правильно писать на посылку и как ее восстановить. Если ZigBeeDev Parcelable (правильно протестирован), как мне это сделать правильно?

Ты почти понял!

Вам просто нужно сделать:

 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) in.readSerializable(); in.readTypedList(_devices, ZigBeeDev.CREATOR); } 

Это все!

Для вашего списка Integer вы также можете:

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

Он должен работать.

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

 _devices = in.createTypedArrayList(ZigBeeDev.CREATOR); 

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

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

 _lqis = in.createTypedArrayList(ZigBeeDev.CREATOR); 

И в «writeToParcel» используйте

 out.writeTypedList(_lqis); 
  • Должен квалифицировать выделение с помощью экземпляра типа GeoLocation
  • Как запретить Gson выражать целые числа как float
  • Запуск действий на вкладке в Android
  • Java-коллекция пар ценностей? (кортежи?)
  • Android - Как сделать скриншот программным
  • Ошибка CreateProcess = 740. Запрошенная операция требует повышения
  • AlertDialog с пользовательским представлением: изменение размера, чтобы обернуть содержимое представления
  • SQlite Получение ближайших мест (с широтой и долготой)
  • Невозможно скомпилировать проект, когда я использую Lombok под IntelliJ IDEA
  • Широковещательный приемник для проверки подключения к Интернету в приложении Android
  • Integer.toString (int i) vs String.valueOf (int i)
  • Давайте будем гением компьютера.