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
- Parcelable y herencia
- 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?
- Cómo en Android pasar un objeto a un nuevo propósito
- Cómo pasar Drawable usando Parcelable
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
- Android: pasar la lista <GeoPoint> a otra actividad
- Persistencia de un objeto Parcelable en Android
- ¿Cómo maneja la superficie la recolección de basura después de ser parcelada en Android?
- Android: pasar el objeto del widget de recopilación a la actividad
- ¿Cómo leer y escribir Enum en paquete en Android?
- Pasar lista de objetos complejos de actividad a fragmento
- Cómo hacer una lista <enum> parcelable?
- Enviar ArrayList <Object> de BroadCastReceiver a Actividad
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")
- Android: desvanece la vista en y fuera
- ¿Cuál es el significado de esto en Eclipse: "Camino para el proyecto debe tener sólo un segmento."