2011-01-24 73 views
2

我有一個註冊了CREATE_SHORTCUT的應用程序,並設置了一個針對我的活動之一的快捷方式的意圖。作爲額外的。意圖包含我的一個應用程序對象...即,在我的應用程序中定義的一個類型的對象。android快捷方式,可以快捷方式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 [email protected] 
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

編號意圖不能包含自定義對象。 – Falmarri 2011-01-24 00:05:48

回答

2

聽起來是對的。啓動程序嘗試使用該意圖並擊中自定義類中的java.lang.ClassNotFoundException異常。沒有辦法(我知道)將類「添加」到啓動器「classpath」中。

夫婦的想法:

試試「序列化」您的應用程序對象轉換成字符串(或字節數組)。它不必是官方的Java序列化,它可以是一個簡單的字符串格式,您可以將其轉換爲應用程序實例。然後將該字符串存儲在意圖中,並在接收活動中處理字符串意圖。

或者,將應用程序對象的實例變量單獨存儲在意圖中(假設ivars是基本類型和/或標準對象,如String)。

+1

是的,這就是我所做的,利用捆綁到SDK中的json軟件包。該活動可以嘗試獲取真實對象或序列化表單。 – 2011-01-24 00:49:55