Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid: ClassNotFoundException when passing serializable object to Activity
    text
    copied!<p>I have a few crash report logs from android market similar to this:</p> <pre><code>Exception class: java.lang.ClassNotFoundException Source method: PathClassLoader.findClass() java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.package/my.app.package.MyActivity}: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = my.app.package.a.ae) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2833) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854) at android.app.ActivityThread.access$2300(ActivityThread.java:136) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:143) at android.app.ActivityThread.main(ActivityThread.java:5068) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = my.app.package.a.ae) at android.os.Parcel.readSerializable(Parcel.java:1951) at android.os.Parcel.readValue(Parcel.java:1822) at android.os.Parcel.readMapInternal(Parcel.java:2008) at android.os.Bundle.unparcel(Bundle.java:208) at android.os.Bundle.getBundle(Bundle.java:1078) at android.app.Activity.onRestoreInstanceState(Activity.java:861) at android.app.Activity.performRestoreInstanceState(Activity.java:835) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2811) ... 11 more Caused by: java.lang.ClassNotFoundException: my.app.package.a.ae at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:235) at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2590) at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1846) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:826) at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2066) at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:929) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240) at android.os.Parcel.readSerializable(Parcel.java:1945) ... 19 more Caused by: java.lang.NoClassDefFoundError: my.app.package.a.ae ... 29 more Caused by: java.lang.ClassNotFoundException: my.app.package.a.ae in loader dalvik.system.PathClassLoader[.] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) at java.lang.ClassLoader.loadClass(ClassLoader.java:573) at java.lang.ClassLoader.loadClass(ClassLoader.java:532) ... 29 more </code></pre> <p>Please note that I am using proguard -> that's why the "missing" class name is "a.ae".<br> Actually, "a.ae" is the name proguard gave to the class "MyObject", which is shown below. </p> <p>Any ideia on why this happens? </p> <p>I don't think it has to do with proguard, because if it was a problem caused by proguard class renaming, it should happen all times and I would be able to reproduce this issue myself.</p> <p>Does it have to do with passing a serializable object to MyActivity? <br/> In MyActivity I have <br/></p> <pre><code>public void onCreate(Bundle savedInstanceState) { myObj = (MyObject) getIntent().getSerializableExtra("nameOfMyObject"); //here I am trying to read myObj's properties and app seems to crash here </code></pre> <p>}</p> <p><br/></p> <p>MyObject is just an entity with several types of class members, ex:<br> public class MyObject implements Serializable {</p> <pre><code> /** Generated serialVersionUID */ static final long serialVersionUID = -267025879233327409L; static final String CONSTANT1 = "xpto"; LinkedHashMap&lt;String, Object&gt; components; ArrayList&lt;String&gt; prop1; (...) } </code></pre> <p>I am starting MyActivity with:</p> <pre><code>MyObject obj = new MyObj(stuff); Intent intent; intent = new Intent(CurrentActivity.this, MyActivity.class); intent.putExtra("nameOfMyObject", obj); CurrentActivity.this.startActivity(intent); </code></pre> <p>Do you think it has to do with the way the object is being passed (as a serializable extra)?<br> In the case that I don't find any other solution I think I will "serialize" the object myself to a String and then pass the String extra. What do you think about this?</p> <p>EDIT: I have tried to reproduce this issue, without success, in the emulator and in the following devices: </p> <p>-Motorola Milestone 2 Android 2.2<br> -Samsung Galaxy Tab Android 2.2<br> -Vodafone 845 Android 2.1<br> -HTC Tatoo Android 1.6<br> -Xperia X10 Android 1.6<br> -Nexus One Android 2.2<br> -Google G1 Android 1.5 </p> <p>Any new ideas?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload