No se puede pasar el objeto personalizado en un intento: El método Poner extra es ambiguo para el tipo Intención

Si trato de escribir

Car myCarObject=getCar(); Intent details = new Intent(Start.this, DetailsCar.class); details.putExtra("Car", myCarObject); startActivity(details); 

Eclipse me muestra un error de compilación "El método poner extra es ambiguo para el tipo de intención" en la línea

  details.putExtra("Car", myCarObject); 

Si utilizo el código

 Car myCarObject=getCar(); ArrayList<Car> parcelableExtra = new ArrayList<Car>(); parcelableExtra.add(myCarObject); Intent details = new Intent(Start.this, DetailsCar.class); details.putExtra("Car", parcelableExtra); startActivity(dettagli); 

Y trato de cargar el extra con este código en la intención de destino con

 ArrayList<Car> parcelableExtra = new ArrayList<Car>(); parcelableExtra = (ArrayList<Car>) getIntent().getExtras().getParcelable("Car"); Car c=parcelableExtra.get(0); 

Recibo esta advertencia

 12-14 05:30:07.669: W/Bundle(19823): Key Car expected Parcelable but value was a java.util.ArrayList. The default value <null> was returned. 12-14 05:30:07.679: W/Bundle(19823): Attempt to cast generated internal exception: 12-14 05:30:07.679: W/Bundle(19823): java.lang.ClassCastException: java.util.ArrayList 12-14 05:30:07.679: W/Bundle(19823): at android.os.Bundle.getParcelable(Bundle.java:1106) 12-14 05:30:07.679: W/Bundle(19823): at my.app.com.DetailsCar.onCreate(DetailsCar.java:43) 12-14 05:30:07.679: W/Bundle(19823): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 12-14 05:30:07.679: W/Bundle(19823): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 12-14 05:30:07.679: W/Bundle(19823): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 12-14 05:30:07.679: W/Bundle(19823): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-14 05:30:07.679: W/Bundle(19823): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 12-14 05:30:07.679: W/Bundle(19823): at android.os.Handler.dispatchMessage(Handler.java:99) 12-14 05:30:07.679: W/Bundle(19823): at android.os.Looper.loop(Looper.java:130) 12-14 05:30:07.679: W/Bundle(19823): at android.app.ActivityThread.main(ActivityThread.java:3687) 12-14 05:30:07.679: W/Bundle(19823): at java.lang.reflect.Method.invokeNative(Native Method) 12-14 05:30:07.679: W/Bundle(19823): at java.lang.reflect.Method.invoke(Method.java:507) 12-14 05:30:07.679: W/Bundle(19823): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 12-14 05:30:07.679: W/Bundle(19823): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 12-14 05:30:07.679: W/Bundle(19823): at dalvik.system.NativeStart.main(Native Method) 12-14 05:30:07.679: W/dalvikvm(19823): threadid=1: thread exiting with uncaught exception (group=0x40018578) 

Y la aplicación se bloquea con una excepción de punto nulo

Mi objeto Car es Parcelable

Entonces que pasa

El primer error: 'El método poner extra es ambiguo para el tipo de intención'.

El Class Car es Serializable y Parcelable , el compilador no sabe si usar putExtra(Serializable s) o putExtra(Parcelable p) para manejar su solicitud. Así que tienes que echar tu Car a uno de ellos cuando se utiliza Intent.putExtra() .

 Intent.putExtra("car", (Parcelable)myCarObject); Intent.putExtra("car", (Serializable)myCarObject); 

El segundo error: java.lang.ClassCastException: java.util.ArrayList

putExtra el objeto Car en un ArrayList y use putExtra para enviarlo a la siguiente actividad. Un ArrayList no es Parcelable pero sólo Serializable . El putExtra(ArrayList) funciona como putExtra(Serializable) , pero lo lees por getParcelable() . Un ArrayList no se puede convertir en Parcelable .

yo uso esto

En el remitente Activiy

 Intent intent = new Intent(activity, MyActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("my object", myObject); intent.putExtras(bundle); startActivity(intent); 

En el receptor:

 myObject = (MyObject) getIntent().getExtras().getSerializable("my object"); 

Funciona bien para mí probarlo. Pero el objeto debe ser serializable 🙂

Así es como paso mis objetos que son serializable, creo que debería funcionar de la misma manera para parcelable. Pasar:

 Intent intent=new Intent(OverviewActivity.this,CarDetailTabActivity.class); intent.putExtra("CAR",myCarObject); startActivity(intent); 

Recibir:

 Car carObject=(Car)getIntent().getSerializableExtra("CAR"); 

Coche:

 import java.io.Serializable; public class Car implements Serializable { private static final long serialVersionUID = 1L; ...... 

getIntent().getExtras() devuelve un Bundle adicional de su intento, no de sus datos. Para obtener su lista use getIntent().getParcelableArrayListExtra("Car")

  • Transmisión de JSONObject a otra actividad
  • ¿Un objeto serializable siempre se serializa cuando se pone en un paquete?
  • Cómo definir parcelable de tipo de interfaz en el archivo .aidl?
  • ¿Por qué utilizar parcelable cuando se puede realizar la misma tarea utilizando variables estáticas?
  • Restauración de la vista SavedState lanza ClassNotFoundException al desmarcar la vista principal SavedState
  • Falta el campo CREATOR Parcelable?
  • Ayuda con el paso de ArrayList y la actividad parcelable
  • Cómo obtener ClassLoader de variable de tipo (para parcelar una clase usando genéricos)
  • Objetos complementarios en las interfaces Kotlin
  • Clase no encontrada cuando Unmarshalling Android Intent Parcelable
  • Paquete interior parcelable que se agrega a la parcela
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.