多くの場合、Parcelable と Bundle を問題なく使用しますが、今回は Parcelable オブジェクトに他の Parcelable オブジェクトの配列を含める必要がありますが、残念ながら何かがうまくいかず、NullPointerException が発生するため、確かに Parcelable の構成に間違いがあります。 、しかし、私はそれを修正する方法を理解していませんでした。
ここで私の試み
public class CarConfig implements Serializable, Parcelable {
Car cars[];
int speed;
public CarConfig(Car[] cars, int speed) {
super();
this.cars = cars;
this.speed = speed;
}
public CarConfig() {
}
public static Parcelable.Creator<CarConfig> getCreator() {
return CREATOR;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeParcelableArray(cars, 0);
arg0.writeInt(speed);
}
public static final Parcelable.Creator<CarConfig> CREATOR = new Parcelable.Creator<CarConfig>() {
public CarConfig createFromParcel(Parcel in) {
return new CarConfig(in);
}
public CarConfig[] newArray(int size) {
return new CarConfig[size];
}
};
private CarConfig(Parcel in) {
Parcelable[] p = in.readParcelableArray(Car.class.getClassLoader());
cars = new Car[p.length];
for (int i = 0; i < p.length; i++) {
cars[i] = (Car) p[i];
}
speed = in.readInt();
}
}
エラーログはこちら
java.lang.ClassCastException: android.os.Bundle cannot be cast to com.myapp.uk.CarConfig
at com.myapp.uk.MainActivity.onCreate(MainActivity.java:98)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
宛先アクティビティでオブジェクトを取得しようとすると、クラッシュが正確に発生します
Bundle bundle = getIntent().getExtras();
cg = bundle.getParcelable("DataKey");