5

I'm trying to send the Serializable object from one application to another.

My android application has a serializable class

public class MyClass implements Serializable

and I then put one instance of it to the intent

MyClass myObject = new MyClass();
intent.putExtra("payItem", myObject);
intent.setAction("com.mypackage.some.action");

when I call startActiviy

startActivity(intent);

I got app crash

5-16 11:09:24.738 30673-30673/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: system:ui, PID: 30673
java.lang.RuntimeException: Unable to start activity ComponentInfo{android/com.android.internal.app.ResolverActivity}: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.mypackage.MyClass)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6938)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.mypackage.MyClass)
    at android.os.Parcel.readSerializable(Parcel.java:2956)
    at android.os.Parcel.readValue(Parcel.java:2742)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058)
    at android.os.BaseBundle.unparcel(BaseBundle.java:257)
    at android.os.Bundle.getParcelable(Bundle.java:888)
    at android.content.Intent.getParcelableExtra(Intent.java:7734)
    at android.app.Activity.getReferrer(Activity.java:5398)
    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554)
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435)
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331)
    at android.app.Activity.performCreate(Activity.java:7174)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6938) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
 Caused by: java.lang.ClassNotFoundException: com.mypackage.MyClass
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:453)
    at android.os.Parcel$2.resolveClass(Parcel.java:2942)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1616)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374)
    at android.os.Parcel.readSerializable(Parcel.java:2950)
    at android.os.Parcel.readValue(Parcel.java:2742) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058) 
    at android.os.BaseBundle.unparcel(BaseBundle.java:257) 
    at android.os.Bundle.getParcelable(Bundle.java:888) 
    at android.content.Intent.getParcelableExtra(Intent.java:7734) 
    at android.app.Activity.getReferrer(Activity.java:5398) 
    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554) 
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435) 
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331) 
    at android.app.Activity.performCreate(Activity.java:7174) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6938) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mypackage.MyClass" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system/vendor/lib64, /system/lib64, /system/vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:453) 
    at android.os.Parcel$2.resolveClass(Parcel.java:2942) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1616) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374) 
    at android.os.Parcel.readSerializable(Parcel.java:2950) 
    at android.os.Parcel.readValue(Parcel.java:2742) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058) 
    at android.os.BaseBundle.unparcel(BaseBundle.java:257) 
    at android.os.Bundle.getParcelable(Bundle.java:888) 
    at android.content.Intent.getParcelableExtra(Intent.java:7734) 
    at android.app.Activity.getReferrer(Activity.java:5398) 
    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554) 
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435) 
    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331) 
    at android.app.Activity.performCreate(Activity.java:7174) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6938) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

Actually my phone has installed two applications with both register an activity with the same action name

<activity
        android:name="com.mypackage.MyActivity"
        android:exported="true"
        >
        <intent-filter>
            <action android:name="com.mypackage.some.action"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

I would expect a dialog shown to let me choose which activity should be started, but I just got the error above. If I uninstall one of the applications, no error occurs and it runs as expected.

My question is

  1. Why the dialog is not shown
  2. Is it the reason of the crash
  3. What's the solution to avoid that error if the two applications are both installed
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96
ArL
  • 283
  • 5
  • 11
  • 2
    Are you trying to send the Serializable object from one Application to another? – Sagar May 16 '18 at 03:59
  • 1
    @Sagar Yes, that's what I want to do – ArL May 16 '18 at 04:01
  • 1
    @ArL In that case I think the target application doesn't know about your custom serialised object `MyClass`. – sha May 16 '18 at 04:28
  • have a look https://stackoverflow.com/questions/32181516/android-java-lang-runtimeexception-parcelable-encounteredclassnotfoundexceptio – Masoom Badi May 16 '18 at 05:15
  • 1
    take a look at https://stackoverflow.com/questions/45373374/sending-serializable-object-between-applications-with-broadcast-receiver – ישו אוהב אותך May 16 '18 at 07:02
  • Can you try using a bundle ? Something like this `Bundle serializable = new Bundle();` `serializable.putSerializable("key",myObject)`. – Sunil Sunny May 16 '18 at 07:21
  • For now I'm using Gson instead of my own serialization, I will do more research after looking at your suggestions – ArL May 16 '18 at 14:11

0 Answers0