我有一个注册CREATE_SHORTCUT的应用程序,并设置针对我的某个活动的快捷方式的意图。作为额外的。 intent包含我的一个应用程序对象...即,在我的应用程序中定义的类型的对象。
当我添加快捷方式时,我得到下面粘贴的异常。我的猜测是问题是主屏幕应用程序需要反序列化该额外的意图,并且它对该类没有可见性。这意味着快捷方式意图的任何附加应用必须是标准的Android SDK对象。
我错过了什么?
E/AndroidRuntime( 141): Caused by: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = org.jtb.nextvta.Route)
E/AndroidRuntime( 141): at android.os.Parcel.readSerializable(Parcel.java:1890)
E/AndroidRuntime( 141): at android.os.Parcel.readValue(Parcel.java:1761)
E/AndroidRuntime( 141): at android.os.Parcel.readMapInternal(Parcel.java:1947)
E/AndroidRuntime( 141): at android.os.Bundle.unparcel(Bundle.java:169)
E/AndroidRuntime( 141): at android.os.Bundle.keySet(Bundle.java:256)
E/AndroidRuntime( 141): at android.content.Intent.toUri(Intent.java:4868)
E/AndroidRuntime( 141): at com.android.launcher.ApplicationInfo.onAddToDatabase(ApplicationInfo.java:103)
E/AndroidRuntime( 141): at com.android.launcher.LauncherModel.addItemToDatabase(LauncherModel.java:1386)
E/AndroidRuntime( 141): at com.android.launcher.Launcher.addShortcut(Launcher.java:740)
E/AndroidRuntime( 141): at com.android.launcher.Launcher.completeAddShortcut(Launcher.java:670)
E/AndroidRuntime( 141): at com.android.launcher.Launcher.onActivityResult(Launcher.java:378)
E/AndroidRuntime( 141): at android.app.Activity.dispatchActivityResult(Activity.java:3625)
E/AndroidRuntime( 141): at android.app.ActivityThread.deliverResults(ActivityThread.java:3220)
E/AndroidRuntime( 141): ... 11 more
E/AndroidRuntime( 141): Caused by: java.lang.ClassNotFoundException: org.jtb.nextvta.Route
E/AndroidRuntime( 141): at java.lang.Class.classForName(Native Method)
E/AndroidRuntime( 141): at java.lang.Class.forName(Class.java:237)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2595)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1848)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:852)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2006)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)
E/AndroidRuntime( 141): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)
E/AndroidRuntime( 141): at android.os.Parcel.readSerializable(Parcel.java:1884)
E/AndroidRuntime( 141): ... 23 more
E/AndroidRuntime( 141): Caused by: java.lang.NoClassDefFoundError: org.jtb.nextvta.Route
E/AndroidRuntime( 141): ... 33 more
E/AndroidRuntime( 141): Caused by: java.lang.ClassNotFoundException: org.jtb.nextvta.Route in loader dalvik.system.PathClassLoader@4376dac0
E/AndroidRuntime( 141): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime( 141): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime( 141): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime( 141): ... 33 more
答案 0 :(得分:2)
听起来很对。启动程序尝试使用intent并从自定义类中命中java.lang.ClassNotFoundException
异常。没有办法(我知道)将类“添加”到启动器“classpath”。
一些想法:
尝试将应用程序对象“序列化”为字符串(或字节数组)。它不必是官方Java序列化,它可以是一个简单的字符串格式,您可以转换为/从应用程序实例。然后将该字符串存储在intent中,并处理接收活动上的字符串意图。
或者,将应用程序对象的实例变量分别存储在intent中(假设ivars是基元和/或标准对象,如String
)。