android - 无法在 Intent : The Method Put Extra is Ambiguous for the type Intent 中传递自定义对象

标签 android android-intent parcelable serializable

如果我尝试写作

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

Eclipse 向我显示编译错误“The Method Put Extra is Ambiguous for the type 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);

我尝试在目标 Intent 中使用此代码加载额外内容

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)

应用程序因空点异常而崩溃

我的 Car 对象是 Parcelable

所以....怎么了?

最佳答案

第一个错误:'The Method Put Extra is Ambiguous for the type 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 发送到下一个 Activity 。 ArrayList 不是 Parcelable 而只是 SerializableputExtra(ArrayList)putExtra(Serializable) 一样工作,但您可以通过 getParcelable() 读取它。 ArrayList 不能转换为 Parcelable

关于android - 无法在 Intent : The Method Put Extra is Ambiguous for the type Intent 中传递自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880396/

相关文章:

android - 从 AsyncTask 调用不同的 Activity 方法

Android - 拍照 - onActivityResult 立即返回

java - 如何在Parcelable类中实现读写

android-studio - Kotlin - 可解析类型不匹配 : Required: String, 找到 : String?

java - 如何将 created_time 字段值从 Android Studio 中的 Instagram 媒体对象转换为日期

android - 无法使用 opencellid.org Android 获取位置

android - Retrofit+OkHttp+Picasso okio依赖

android - 服务启动的 Intent 过滤器

android - TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA 的 IntentNotFoundException

java - 不在 Activity 之间传递的 Parcelable 数据