AllStatStruct という名前のクラスがあります。このクラスには、私のクラス StatStructCycle、StatStructHistory、および MatrixStruct のオブジェクトである 3 つの属性が含まれています。すべてのクラスはクラス DataStruct を拡張し、Parcelable インターフェースを実装します。readParceable()
インターフェイスの実装では、すべてのクラスがorを使用して読み書きされwriteParceable()
ます。
私のアクティビティでは、AsyncTask で SOAP Web サービスを呼び出し、 class のオブジェクトを取得しますAllStatStruct
。このオブジェクトは、次のアクティビティを作成することによって次のアクティビティに渡されますBundle
。
protected void onPostExecute(final AllStatStruct ass) {
if (ass != null) {
if (dialog.isShowing()) {
dialog.dismiss();
}
Bundle bundle = new Bundle();
bundle.putParcelable("allStatStruct", ass);
intent = new Intent(packageContext, PrivateView.class);
intent.putExtras(bundle);
startActivity(intent);
} else {
KreativBarometerMainView.this.showDialog(9999);
}
}
LogCat のトレース出力でわかるように、パーセルのマーシャリングはうまく機能しています。しかし、区画をアンマーシャリングすると ClassNotFoundException が発生し、その理由がわかりません。これはトレースです:
05-11 15:02:59.796: E/AndroidRuntime(8647): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1958)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct.<init>(AllStatStruct.java:45)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:70)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:1)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1981)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readValue(Parcel.java:1846)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readMapInternal(Parcel.java:2083)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.unparcel(Bundle.java:208)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.getParcelable(Bundle.java:1100)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.ui.PrivateView.onCreate(PrivateView.java:693)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628)
05-11 15:02:59.796: E/AndroidRuntime(8647): ... 11 more
ご覧のとおり、見つからないクラスには名前がありません。したがって、「」という名前のクラスを検索していますが、もちろん見つかりません。
なぜこれが起こるのか、私にはわかりません。誰かが私を助けることができますか?私はすでに ClassLoader をいじってみましたが、インテントに追加のクラスローダーを与え、これを使用してパーセルブルを非整列化することはできません。
編集:
あなたが示唆したように、私は AllStatStruct のいくつかの部分を別々に渡そうとしました。StatStructCycle
およびMatrixStruct
では問題なく動作しますが、StatStructHistory
ではまだエラーがスローされます。
NullPointerException
s を含む ArrayList をアンマーシャリングしようとすると、が得られStatStructCycle
ます。履歴の他の部分をコメントアウトしました。
と を使用して ArrayList を読み書きしようとしましたwriteTypedList(List<T> list)
がreadTypedList(List<T> list, Creator<T> c)
、どちらも機能していません。
trimToSize()
ArrayLists を使用しているので、ArrayList の「空の」スロットが問題を引き起こす可能性があると考えたため、を使用して容量を実際のサイズに調整しました。しかし、繰り返しますが、そうではありません...
デバッガーでアプリを起動すると、マーシャリングされたStatStructHistory
ものに空の値がないことが示されます...すべての属性またはリストアイテムが初期化されます。これNullPointerException
がどこから来ているのか、私にはわかりません。
よろしくhtz