Android java.lang.RuntimeException:Parcelable 读取 Serialized 对象时遇到 ClassNotFoundException

ArL*_*ArL 5 java android

我正在尝试发送Serializable对象从一个应用程序发送到另一个应用程序。

\n\n

我的 Android 应用程序有一个可序列化的类

\n\n
public class MyClass implements Serializable\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我将其中的一个实例用于意图

\n\n
MyClass myObject = new MyClass();\nintent.putExtra("payItem", myObject);\nintent.setAction("com.mypackage.some.action");\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我调用startActiviy时

\n\n
startActivity(intent);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的应用程序崩溃了

\n\n
5-16 11:09:24.738 30673-30673/? E/AndroidRuntime: FATAL EXCEPTION: main\nProcess: system:ui, PID: 30673\njava.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)\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)\n    at android.os.Handler.dispatchMessage(Handler.java:105)\n    at android.os.Looper.loop(Looper.java:164)\n    at android.app.ActivityThread.main(ActivityThread.java:6938)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)\n Caused by: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.mypackage.MyClass)\n    at android.os.Parcel.readSerializable(Parcel.java:2956)\n    at android.os.Parcel.readValue(Parcel.java:2742)\n    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058)\n    at android.os.BaseBundle.unparcel(BaseBundle.java:257)\n    at android.os.Bundle.getParcelable(Bundle.java:888)\n    at android.content.Intent.getParcelableExtra(Intent.java:7734)\n    at android.app.Activity.getReferrer(Activity.java:5398)\n    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554)\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435)\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331)\n    at android.app.Activity.performCreate(Activity.java:7174)\n    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)\xc2\xa0\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\xc2\xa0\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)\xc2\xa0\n    at android.os.Handler.dispatchMessage(Handler.java:105)\xc2\xa0\n    at android.os.Looper.loop(Looper.java:164)\xc2\xa0\n    at android.app.ActivityThread.main(ActivityThread.java:6938)\xc2\xa0\n    at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)\xc2\xa0\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)\xc2\xa0\n Caused by: java.lang.ClassNotFoundException: com.mypackage.MyClass\n    at java.lang.Class.classForName(Native Method)\n    at java.lang.Class.forName(Class.java:453)\n    at android.os.Parcel$2.resolveClass(Parcel.java:2942)\n    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1616)\n    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)\n    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)\n    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)\n    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374)\n    at android.os.Parcel.readSerializable(Parcel.java:2950)\n    at android.os.Parcel.readValue(Parcel.java:2742)\xc2\xa0\n    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058)\xc2\xa0\n    at android.os.BaseBundle.unparcel(BaseBundle.java:257)\xc2\xa0\n    at android.os.Bundle.getParcelable(Bundle.java:888)\xc2\xa0\n    at android.content.Intent.getParcelableExtra(Intent.java:7734)\xc2\xa0\n    at android.app.Activity.getReferrer(Activity.java:5398)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331)\xc2\xa0\n    at android.app.Activity.performCreate(Activity.java:7174)\xc2\xa0\n    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)\xc2\xa0\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)\xc2\xa0\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)\xc2\xa0\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\xc2\xa0\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)\xc2\xa0\n    at android.os.Handler.dispatchMessage(Handler.java:105)\xc2\xa0\n    at android.os.Looper.loop(Looper.java:164)\xc2\xa0\n    at android.app.ActivityThread.main(ActivityThread.java:6938)\xc2\xa0\n    at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)\xc2\xa0\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)\xc2\xa0\n 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]]\n    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)\n    at java.lang.Class.classForName(Native Method)\xc2\xa0\n    at java.lang.Class.forName(Class.java:453)\xc2\xa0\n    at android.os.Parcel$2.resolveClass(Parcel.java:2942)\xc2\xa0\n    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1616)\xc2\xa0\n    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)\xc2\xa0\n    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)\xc2\xa0\n    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)\xc2\xa0\n    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374)\xc2\xa0\n    at android.os.Parcel.readSerializable(Parcel.java:2950)\xc2\xa0\n    at android.os.Parcel.readValue(Parcel.java:2742)\xc2\xa0\n    at android.os.Parcel.readArrayMapInternal(Parcel.java:3058)\xc2\xa0\n    at android.os.BaseBundle.unparcel(BaseBundle.java:257)\xc2\xa0\n    at android.os.Bundle.getParcelable(Bundle.java:888)\xc2\xa0\n    at android.content.Intent.getParcelableExtra(Intent.java:7734)\xc2\xa0\n    at android.app.Activity.getReferrer(Activity.java:5398)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.getReferrerPackageName(ResolverActivity.java:554)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:435)\xc2\xa0\n    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:331)\xc2\xa0\n    at android.app.Activity.performCreate(Activity.java:7174)\xc2\xa0\n    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)\xc2\xa0\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)\xc2\xa0\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)\xc2\xa0\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\xc2\xa0\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)\xc2\xa0\n    at android.os.Handler.dispatchMessage(Handler.java:105)\xc2\xa0\n    at android.os.Looper.loop(Looper.java:164)\xc2\xa0\n    at android.app.ActivityThread.main(ActivityThread.java:6938)\xc2\xa0\n    at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)\xc2\xa0\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n\n

实际上我的手机安装了两个应用程序,它们都注册了一个具有相同操作名称的活动\n

\n\n
<activity\n        android:name="com.mypackage.MyActivity"\n        android:exported="true"\n        >\n        <intent-filter>\n            <action android:name="com.mypackage.some.action"/>\n            <category android:name="android.intent.category.DEFAULT"/>\n        </intent-filter>\n    </activity>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望显示一个对话框让我选择应该启动哪个活动,但我刚刚收到上面的错误。如果我卸载其中一个应用程序,则不会发生错误并且它会按预期运行。

\n\n

我的问题是

\n\n
    \n
  1. 为什么不显示对话框
  2. \n
  3. 这是坠机的原因吗
  4. \n
  5. 如果同时安装了这两个应用程序,有什么解决方案可以避免该错误
  6. \n
\n