Невозможно передать пользовательский объект в намерении: метод Put Extra является неоднозначным для типа Intent

Если я попытаюсь написать

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

Eclipse покажет мне ошибку компиляции «Метод Put Extra является неоднозначным для типа Intent» в строке

  details.putExtra("Car", myCarObject); 

Если я использую код

 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); 

И я пытаюсь загрузить дополнительный код с целевым назначением с помощью

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

Я получаю это предупреждение

 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) 

И приложение вылетает с исключением Null Point

Мой Автомобильный объект

Так …. что не так?

Solutions Collecting From Web of "Невозможно передать пользовательский объект в намерении: метод Put Extra является неоднозначным для типа Intent"

Первая ошибка: «Метод Put Extra является неоднозначным для типа Intent».

Класс Car является Serializable и Parcelable , компилятор не знает, использовать ли putExtra(Serializable s) или putExtra(Parcelable p) для обработки вашего запроса. Поэтому при использовании Intent.putExtra() вы должны отдать свой Car одному из них.

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

Вторая ошибка: java.lang.ClassCastException: java.util.ArrayList

Вы помещаете объект Car в ArrayList и используете putExtra для отправки на следующую putExtra . ArrayList не является Parcelable но только Serializable . putExtra(ArrayList) работает как putExtra(Serializable) , но вы читаете его getParcelable() . ArrayList нельзя отнести к Parcelable .

Я использую это

В отправителе Activiy

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

В приемнике:

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

Отлично работает для меня. Но объект должен быть сериализуемым 🙂

Вот как я передаю свои объекты, которые могут быть сериализуемыми, я считаю, что он должен работать одинаково для разбираемых. Проходить:

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

Получать:

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

Автомобиль:

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

getIntent().getExtras() возвращает дополнительный getIntent().getExtras() из ваших намерений, а не ваши данные. Для получения списка используйте getIntent().getParcelableArrayListExtra("Car")