書き込もうとしたら
Car myCarObject=getCar();
Intent details = new Intent(Start.this, DetailsCar.class);
details.putExtra("Car", myCarObject);
startActivity(details);
Eclipseは私にコンパイルエラーを表示します「メソッドプットエクストラはタイプインテントに対して曖昧です」行
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)
そして、Null Point Exceptionでアプリがクラッシュします
私の車オブジェクトはパーセル可能です
だから....何が悪いの?
最初のエラー: 'Intent型のExtraメソッドはあいまいです'
クラスCar
はSerializable
とParcelable
の両方であり、コンパイラはputExtra(Serializable s)
またはputExtra(Parcelable p)
を使用して処理するかどうかを知りませんあなたの要求。したがって、Intent.putExtra()
を使用する場合は、Car
をそれらの1つにキャストする必要があります。
_Intent.putExtra("car", (Parcelable)myCarObject);
Intent.putExtra("car", (Serializable)myCarObject);
_
2番目のエラー:Java.lang.ClassCastException:Java.util.ArrayList
Car
オブジェクトをArrayList
に配置し、putExtra
を使用して次のアクティビティに送信します。 ArrayList
はParcelable
ではなく、Serializable
のみです。 putExtra(ArrayList)
はputExtra(Serializable)
として機能しますが、getParcelable()
で読むことができます。 ArrayList
はParcelable
にキャストできません。
これを使う
送信者のアクティビティで
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;
......
解決策:implements Serializable
のようなクラスによってSerializable
インターフェイスを実装します
getIntent().getExtras()
は、データではなく、意図から余分なBundle
を返します。リストを取得するには、getIntent().getParcelableArrayListExtra("Car")
を使用します