Lista de objeto personalizado y Parcelable dar NullPointerException

Estoy tratando de entender los principios de Parcelable en Android y escribí este código simplemente para encontrar lo que está pasando cuando intento "parcel" una lista de objetos personalizados – que da mi NullPointerException

Aquí está mi código:

package cz.united121.android.testpupose.Objects.HelperObject; import android.os.Parcel; import android.os.Parcelable; public class MyString implements Parcelable { private static final String TAG = MyString.class.getName(); String mString; public MyString(){ } public MyString(String mString){ this.mString = mString; } public MyString(Parcel in){ mString = in.readString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mString); } public static final Parcelable.Creator<MyString> CREATOR = new Parcelable.Creator<MyString>() { public MyString createFromParcel(Parcel in) { return new MyString(in); } public MyString[] newArray(int size) { return new MyString[size]; } }; } 

Segunda clase tiene Lista de MyString

 package cz.united121.android.testpupose.Objects; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import java.util.ArrayList; import java.util.List; import cz.united121.android.testpupose.Objects.HelperObject.MyString; public class CustomSmall implements Parcelable { private static final String TAG = CustomSmall.class.getName(); int mId; String mName; int mDummy; List<MyString> mStringList; public CustomSmall(){ Log.d(TAG,"CustomSmall()"); mStringList = new ArrayList<>(); } public CustomSmall(Parcel in){ Log.d(TAG,"CustomSmall(Parcel in)"); mId = in.readInt(); mName = in.readString(); mDummy = in.readInt(); in.readTypedList(mStringList,MyString.CREATOR); } public CustomSmall(int mId, String mName, int mDummy, List<MyString> mStringList){ Log.d(TAG, "CustomSmall(int mId, String mName, int mDummy, List<MyString> mStringList)"); this.mId = mId; this.mName = mName; this.mDummy = mDummy; this.mStringList = mStringList; } @Override public int describeContents() { Log.d(TAG,"describeContents()"); return 0; } @Override public void writeToParcel(Parcel dest, int flags) { Log.d(TAG,"writeToParcel(Parcel dest, int flags)"); dest.writeInt(mId); dest.writeString(mName); dest.writeInt(mDummy); dest.writeTypedList(mStringList); } public static final Parcelable.Creator<CustomSmall> CREATOR = new Parcelable.Creator<CustomSmall>() { public CustomSmall createFromParcel(Parcel in) { Log.d(TAG,"createFromParcel(Parcel in)"); return new CustomSmall(in); } public CustomSmall[] newArray(int size) { Log.d(TAG,"newArray(int size)"); return new CustomSmall[size]; } }; } 

y aquí es cómo lo pruebo Una actividad tiene esto después de hacer clic:

  MyString myString1 = new MyString("a"); MyString myString2 = new MyString("b"); MyString myString3 = new MyString("c"); MyString myString4 = new MyString("d"); List<MyString> myStringList1 = new ArrayList<>(); myStringList1.add(myString1); myStringList1.add(myString4); List<MyString> myStringList2 = new ArrayList<>(); myStringList1.add(myString1); myStringList1.add(myString2); myStringList1.add(myString3); myStringList1.add(myString4); CustomSmall customSmall_1 = new CustomSmall(1,"First",42,myStringList1); CustomSmall customSmall_2 = new CustomSmall(2,"Second",88,myStringList2); bundle.putParcelable(CUSTOM_SMALL + "1",customSmall_1); bundle.putParcelable(CUSTOM_SMALL + "2",customSmall_2); Bundle b = new Bundle(); Intent toNavigationDrawer = new Intent(MainActivity.this,NavigationDrawerTest.class); toNavigationDrawer.putExtras(b); startActivity(toNavigationDrawer); 

y la clase NavigationDrawer tiene esto:

  Bundle bundle = getIntent().getExtras(); CustomSmall customSmall_1 = bundle.getParcelable(CUSTOM_SMALL + "1"); CustomSmall customSmall_2 = bundle.getParcelable(CUSTOM_SMALL + "2"); 

pero me da mi error:

 Unable to start activity ComponentInfo{cz.united121.android.testpupose/cz.united121.android.testpupose.NavigationDrawerTest}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference ... Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference ... at cz.united121.android.testpupose.Objects.CustomSmall.<init>(CustomSmall.java:34) at cz.united121.android.testpupose.Objects.CustomSmall$1.createFromParcel(CustomSmall.java:64) at cz.united121.android.testpupose.Objects.CustomSmall$1.createFromParcel(CustomSmall.java:61) 

y CustomSmall.java:34 es la línea:

  in.readTypedList(mStringList,MyString.CREATOR); in public CustomSmall(Parcel in){ 

¿Alguien sabe la solución? Estoy tratando de resolver esto casi 2 días. Muchas gracias de antemano

No has inicializado tu lista mStringList en constructor:

 public CustomSmall(Parcel in){ Log.d(TAG,"CustomSmall(Parcel in)"); mId = in.readInt(); mName = in.readString(); mDummy = in.readInt(); mStringList = new ArrayList<>(); in.readTypedList(mStringList,MyString.CREATOR); } 
  • Uso de Parcelable con referencias circulares
  • Limitación de tamaño en adjunto ¿Parcelable?
  • Paso de arraylist de objetos entre actividades
  • No entiendo por qué se produce esta ClassCastException
  • Algunos objetos parcelables reunidos en un intento / paquete podrían interferir y comprometer la lectura de Intención / Bundle?
  • Es parcelable vale la pena implementar para pasar datos entre las actividades?
  • Android: causas unparceling fuera de la excepción de memoria. ¿Cómo inspeccionar objetos?
  • Ayuda con el paso de ArrayList y la actividad parcelable
  • ¿Por qué utilizar parcelable cuando se puede realizar la misma tarea utilizando variables estáticas?
  • Parcelable de Android Longitudes de array incorrectas
  • Cómo obtener ClassLoader de variable de tipo (para parcelar una clase usando genéricos)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.