I get a ClassNotFoundException
when trying to unmarshall a List<List<LatLng>
in a custom class which implements Parcelable
. How do I get rid of this exception?
Here's my class:
public class Country implements Parcelable {
public static final Parcelable.Creator<Country> CREATOR = new Creator<Country>() {
@Override
public Country[] newArray(int size) {
return new Country[size];
}
@SuppressWarnings("unchecked")
@Override
public Country createFromParcel(Parcel source) {
Country country = new Country();
country.name = source.readString();
country.borders = source.readArrayList(Country.class
.getClassLoader());
return country;
}
};
public String name;
public List<List<LatLng>> borders;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeList(borders);
}
}
And here's my logcat:
03-08 22:09:43.749: E/AndroidRuntime(16991): FATAL EXCEPTION: main
03-08 22:09:43.749: E/AndroidRuntime(16991): java.lang.RuntimeException: Unable to start activity ComponentInfo{codeguru.worldtour/codeguru.worldtour.MainActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: codeguru.worldtour.Country
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2844)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.access$1600(ActivityThread.java:117)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Looper.loop(Looper.java:130)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.main(ActivityThread.java:3695)
03-08 22:09:43.749: E/AndroidRuntime(16991): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 22:09:43.749: E/AndroidRuntime(16991): at java.lang.reflect.Method.invoke(Method.java:507)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-08 22:09:43.749: E/AndroidRuntime(16991): at dalvik.system.NativeStart.main(Native Method)
03-08 22:09:43.749: E/AndroidRuntime(16991): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: codeguru.worldtour.Country
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readParcelable(Parcel.java:1958)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readValue(Parcel.java:1846)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readListInternal(Parcel.java:2092)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readArrayList(Parcel.java:1536)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readValue(Parcel.java:1867)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Parcel.readMapInternal(Parcel.java:2083)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Bundle.unparcel(Bundle.java:208)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Bundle.getBundle(Bundle.java:1078)
03-08 22:09:43.749: E/AndroidRuntime(16991): at ekg.a(SourceFile:74)
03-08 22:09:43.749: E/AndroidRuntime(16991): at maps.e.al.a(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at maps.e.bj.a(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at eir.onTransact(SourceFile:66)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.os.Binder.transact(Binder.java:279)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.maps.internal.IMapViewDelegate$a$a.onCreate(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.maps.MapView$a.onCreate(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.dynamic.a$3.b(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.dynamic.a$1.a(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.maps.MapView$b.eb(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.maps.MapView$b.a(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.dynamic.a.a(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.dynamic.a.onCreate(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at com.google.android.gms.maps.MapView.onCreate(Unknown Source)
03-08 22:09:43.749: E/AndroidRuntime(16991): at codeguru.worldtour.MainActivity.onCreate(MainActivity.java:63)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-08 22:09:43.749: E/AndroidRuntime(16991): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1618)
03-08 22:09:43.749: E/AndroidRuntime(16991): ... 12 more
Marshalling:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putParcelableArrayList(COUNTRIES_KEY, countries);
savedInstanceState.putInt(COUNTRIES_INDEX_KEY, countryIndex);
}
Unmarshalling (in onCreate()
):
if (savedInstanceState != null) {
countryIndex = savedInstanceState.getInt(COUNTRIES_INDEX_KEY, -1);
countries = savedInstanceState
.getParcelableArrayList(COUNTRIES_KEY);
}