2011-01-24 2 views
2

私はCREATE_SHORTCUTに登録して、私の活動の1つをターゲットとするショートカットのインテントを設定します。余分に。インテントには、自分のアプリケーションオブジェクトの1つ、つまり、アプリケーションで定義されたタイプのオブジェクトが含まれています。アンドロイドのショートカットは、アプリケーションオブジェクトを含むショートカットインテントですか?

私がショートカットを追加すると、私は例外を以下に貼り付けます。私の推測では、問題はホームスクリーンアプリがその意図を余分に逆シリアル化する必要があり、そのクラスに対する可視性がないということです。これは、ショートカットインテントのアプリケーションエクストラは、標準の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

答えて

2

右の音。ランチャーはインテントを使用しようとし、カスタムクラスからの例外であるjava.lang.ClassNotFoundExceptionを検出します。ランチャー "classpath"にクラスを "追加"する方法はありません。アイデアの

カップル:文字列(またはバイト配列)にあなたのアプリケーションオブジェクトを「シリアライズ」

してみてください。公式のJavaシリアル化である必要はなく、アプリケーションインスタンスとの間で変換できる単純な文字列形式にすることができます。その後、インテントに文字列を格納し、受信アクティビティに文字列インテントを処理します。

また、アプリケーションオブジェクトのインスタンス変数をインテントに個別に格納することもできます(ivarsはプリミティブやStringのような標準オブジェクトと仮定します)。

+1

はい、これはSDKにバンドルされているjsonパッケージを利用したものです。アクティビティは実際のオブジェクトまたはシリアライズされたフォームを取得しようとする可能性があります。 –

関連する問題