Pasar una lista de objetos entre actividades

Estoy tratando de pasar una lista de objetos entre dos actividades, pero mi aplicación se aplasta en la segunda actividad. ¿Alguien puede ayudarme a resolver este problema …

Aquí está mi código de mi primera actividad:

Intent i = new Intent(); Bundle b = new Bundle(); b.putParcelableArrayList("songs",(ArrayList) albumsArray.get(position).getSongs()); Log.v("--", "OK"); i.putExtras(b); i.setClass(LatestAlbums.this, AlbumDetails.class); startActivity(i); 

Y el código de la segunda actividad:

 songs=new ArrayList(); Bundle b = this.getIntent().getExtras(); if(b!=null) songs = b.getParcelable("songs"); Log.v("--", songs.size()+""); 

Y mi salida de logcat:

 04-03 16:37:03.513: E/AndroidRuntime(6576): FATAL EXCEPTION: main 04-03 16:37:03.513: E/AndroidRuntime(6576): java.lang.RuntimeException: Parcel: unable to marshal value com.musicapp.objects.Songs@419489e8 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Parcel.writeValue(Parcel.java:1137) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Parcel.writeList(Parcel.java:524) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Parcel.writeValue(Parcel.java:1097) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Parcel.writeMapInternal(Parcel.java:493) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Bundle.writeToParcel(Bundle.java:1612) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Parcel.writeBundle(Parcel.java:507) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.content.Intent.writeToParcel(Intent.java:6147) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1613) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.Activity.startActivityFromChild(Activity.java:3458) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.Activity.startActivityForResult(Activity.java:3210) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.Activity.startActivity(Activity.java:3297) 04-03 16:37:03.513: E/AndroidRuntime(6576): at com.outsourcefarm.musicagratis.activities.LatestAlbums$4$1.onItemClick(LatestAlbums.java:232) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.widget.AbsListView$1.run(AbsListView.java:3168) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Handler.handleCallback(Handler.java:605) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Handler.dispatchMessage(Handler.java:92) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.os.Looper.loop(Looper.java:137) 04-03 16:37:03.513: E/AndroidRuntime(6576): at android.app.ActivityThread.main(ActivityThread.java:4440) 04-03 16:37:03.513: E/AndroidRuntime(6576): at java.lang.reflect.Method.invokeNative(Native Method) 04-03 16:37:03.513: E/AndroidRuntime(6576): at java.lang.reflect.Method.invoke(Method.java:511) 04-03 16:37:03.513: E/AndroidRuntime(6576): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 04-03 16:37:03.513: E/AndroidRuntime(6576): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 04-03 16:37:03.513: E/AndroidRuntime(6576): at dalvik.system.NativeStart.main(Native Method) 

Debes hacer que tu clase Song implemente Parcelable .

Intenta lo siguiente

 intent.putParcelableArrayListExtra("key", ArrayList list); startActivity(intent); 

Recuperarlo

 getIntent().getParcelableArrayListExtra("key"); 

Pasar una lista de arrays de objetos definidos por el usuario a Intent Android . Comprueba la respuesta de Sajmon

De acuerdo con los comentarios hechos por Sajmon, la clase Song debe implement Parcelable

 Intent intent=new Intent(ActivityFrom.this,ActivityTo.class); intent.putExtra("StringKey",arrayList); startActivity(intent); 

y para recuperar

 ArrayList myList = (ArrayList) getIntent().getSerializableExtra("StringKey"); 
  i.setClass(LatestAlbums.this, AlbumDetails.class); i.putStringArrayListExtra("list", your song list); startActivity(i); 

Para obtener la lista de matriz en actividad.

 ArrayList fetchList= new ArrayList(); fetchList= getIntent().getStringArrayListExtra("list"); 

Espero que esto te ayudará.

Para más referencia, use este enlace .