ярлык Android, может ли ярлык намерения дополнительно содержать объекты приложения? - PullRequest
2 голосов
/ 24 января 2011

У меня есть приложение, которое регистрирует 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

1 Ответ

2 голосов
/ 24 января 2011

Звучит о праве. Средство запуска пытается использовать намерение и вызывает исключение java.lang.ClassNotFoundException из пользовательского класса. Нет способа (о котором я знаю) «добавить» классы в модуль запуска «classpath».

Пара идей:

Попробуйте "сериализовать" объект вашего приложения в строку (или байтовый массив). Это не должна быть официальная сериализация Java, это может быть простой формат строки, который вы можете преобразовать в / из экземпляра приложения. Затем сохраните строку в намерении и обработайте ее в получающем действии.

В качестве альтернативы, храните переменные экземпляра объекта приложения по отдельности в намерении (при условии, что ivars являются примитивами и / или стандартными объектами, такими как String).

...