Pass an object type ArrayList to another Activity or Activity in Android [duplicated]

0

Good evening, I am trying to pass an arraylist of type object from one activity to another but it has not worked. I have tried this way without success.

Activity 1:

ArrayList<DatosReferencia> Lista = new ArrayList<>();

//Lo ejecuta un boton
   Intent i = new Intent(MainActivity.this, ReferenciasFavoritas.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable("Lista",  Lista);
            i.putExtras(bundle);// Tambien lo he intentado con i.putExtra("Lista",  Lista); Quitando el bundle
            startActivity(i);

Activity 2:

ArrayList<DatosReferencia> lista = (ArrayList<DatosReferencia> ) getIntent().getSerializableExtra("Lista");

The DataReference class I have it like this:

public class DatosReferencia implements Serializable // No posee subclases

The trace of the error is this:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.anaperez.myapplication, PID: 20802
              java.lang.IllegalStateException: Could not execute method for android:onClick
                  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                  at android.view.View.performClick(View.java:4646)
                  at android.view.View$PerformClick.run(View.java:19403)
                  at android.os.Handler.handleCallback(Handler.java:733)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:146)
                  at android.app.ActivityThread.main(ActivityThread.java:5511)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:515)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
                  at dalvik.system.NativeStart.main(Native Method)
               Caused by: java.lang.reflect.InvocationTargetException
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:515)
                  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                  at android.view.View.performClick(View.java:4646) 
                  at android.view.View$PerformClick.run(View.java:19403) 
                  at android.os.Handler.handleCallback(Handler.java:733) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:146) 
                  at android.app.ActivityThread.main(ActivityThread.java:5511) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                  at dalvik.system.NativeStart.main(Native Method) 
               Caused by: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.anaperez.myapplication.DatosReferencia)
                  at android.os.Parcel.writeSerializable(Parcel.java:1316)
                  at android.os.Parcel.writeValue(Parcel.java:1264)
                  at android.os.Parcel.writeList(Parcel.java:653)
                  at android.os.Parcel.writeValue(Parcel.java:1226)
                  at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
                  at android.os.Bundle.writeToParcel(Bundle.java:1692)
                  at android.os.Parcel.writeBundle(Parcel.java:636)
                  at android.content.Intent.writeToParcel(Intent.java:7327)
                  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2276)
                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1425)
                  at android.app.Activity.startActivityForResult(Activity.java:3510)
                  at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
                  at android.app.Activity.startActivityForResult(Activity.java:3471)
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720)
                  at android.app.Activity.startActivity(Activity.java:3713)
                  at android.app.Activity.startActivity(Activity.java:3681)
                  at com.example.anaperez.myapplication.MainActivity.onClick(MainActivity.java:121)
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                  at android.view.View.performClick(View.java:4646) 
                  at android.view.View$PerformClick.run(View.java:19403) 
                  at android.os.Handler.handleCallback(Handler.java:733) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:146) 
                  at android.app.ActivityThread.main(ActivityThread.java:5511) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                  at dalvik.system.NativeStart.main(Native Method) 
               Caused by: java.io.NotSerializableException: android.graphics.Bitmap
                  at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
                  at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
                  at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
                  at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
                  at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
                  at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
                  at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
                  at android.os.Parcel.writeSerializable(Parcel.java:1311)
                  at android.os.Parcel.writeValue(Parcel.java:1264) 
                  at android.os.Parcel.writeList(Parcel.java:653) 
                  at android.os.Parcel.writeValue(Parcel.java:1226) 
                  at android.os.Parcel.writeArrayMapInternal(Parcel.java:618) 
                  at android.os.Bundle.writeToParcel(Bundle.java:1692) 
                  at android.os.Parcel.writeBundle(Parcel.java:636) 
                  at android.content.Intent.writeToParcel(Intent.java:7327) 
                  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2276) 
                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1425) 
                  at android.app.Activity.startActivityForResult(Activity.java:3510) 
                  at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) 
                  at android.app.Activity.startActivityForResult(Activity.java:3471) 
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) 
                  at android.app.Activity.startActivity(Activity.java:3713) 
                  at android.app.Activity.startActivity(Activity.java:3681) 
                  at com.example.anaperez.myapplication.MainActivity.onClick(MainActivity.java:121) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                  at android.view.View.performClick(View.java:4646) 
                  at android.view.View$PerformClick.run(View.java:19403) 
                  at android.os.Handler.handleCallback(Handler.java:733) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:146) 
                  at android.app.ActivityThread.main(ActivityThread.java:5511) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                  at dalvik.system.NativeStart.main(Native Method) 

Thank you very much for your suggestions.

    
asked by Ana P. 16.01.2018 в 06:51
source

1 answer

4

I recommend that you implement Parcelable instead of Serializable that is faster (The serialization process creates many objects which is more work for the GC) and is intended for these occasions.

The code to put it in the intent would be the following:

Intent i = new Intent(MainActivity.this, ReferenciasFavoritas.class);
i.putParcelableArrayListExtra("Lista",  Lista);
startActivity(i);

And to recover it from the intent:

ArrayList<DatosReferencia> lista = getIntent().getParcelableArrayListExtra("Lista");

If you need help to implement parcelable , add the class code DatosReferencia

    
answered by 16.01.2018 / 13:31
source