android快捷方式,快捷方式意图是否可以额外包含应用程序对象?
我有一个应用程序注册 CREATE_SHORTCUT,并设置针对我的一项活动的快捷方式的意图。作为额外的。意图包含我的应用程序对象之一...即我的应用程序中定义的类型的对象。
当我添加快捷方式时,我得到粘贴在下面的异常。我的猜测是,问题在于主屏幕应用程序需要额外反序列化该意图,并且它对该类不可见。这意味着快捷方式意图的任何应用程序附加功能都必须是标准 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
i have an app that registers for CREATE_SHORTCUT, and sets up an intent for the shortcut that targets one of my activities. as an extra. the intent contains one of my application objects ... that is, an object of a type defined in my application.
when i add the shortcut, i get the exception pasted in below. my guess here is that the problem is that the home screen app needs to deserialize that intent extra, and it has no visibility to that class. that would imply that any app extras for a shortcut intent must be standard Android SDK objects.
anything i'm missing?
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
听起来不错。启动器尝试使用意图并命中自定义类中的 java.lang.ClassNotFoundException 异常。 (据我所知)没有办法将类“添加”到启动器“类路径”中。
几个想法:
尝试将应用程序对象“序列化”为字符串(或字节数组)。它不必是官方的 Java 序列化,它可以是可以与应用程序实例相互转换的简单字符串格式。然后将该字符串存储在意图中,并在接收活动上处理该字符串意图。
或者,将应用程序对象的实例变量单独存储在意图中(假设 ivars 是基元和/或标准对象,例如
String
)。Sounds about right. The launcher tries to use the intent and hits the
java.lang.ClassNotFoundException
exception from the custom class. There's no way (that I know of) to "add" the classes to the launcher "classpath".Couple of ideas:
Try "serializing" your application object into a string (or a byte array). It doesn't have to be official Java serialization, it can be a simple string format that you can convert to/from an application instance. Then store the string in the intent and handle the string intent on the receiving activity.
Alternatively, store the application object's instance variables individually in the intent (assuming the ivars are primitives and/or standard objects like
String
).