AllStatStructという名前のクラスがあります。このクラスには、クラスStatStructCycle、StatStructHistory、およびMatrixStructの3つの属性が含まれています。各クラスはDataStructクラスを拡張し、Parcelableインターフェイスを実装します。インターフェイスの実装では、すべてのクラスがreadParceable()
またはwriteParceable()
を使用して読み書きされます。私の活動にBadParcelableException:アンマーシャリング時のClassNotFoundException:(空のクラス名)
は、私はAsyncTask内のSOAP Webサービスを呼び出し、クラス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を使いこなそうとしましたが、意図を余分なクラスローダーに与えて、このクラスを使用してパーセルブルをアンマーシャリングすることはできません。
EDIT:
あなたが示唆したように、私はAllStatStruct別々のいくつかの部分を渡そうとしました。 StatStructCycle
とMatrixStruct
では正常に動作しますが、StatStructHistory
ではエラーがスローされます。
StatStructCycle
でArrayListをアンマーシャリングしようとすると、NullPointerException
が表示されます。私は歴史の他の部分をコメントアウトしました。
writeTypedList(List<T> list)
とreadTypedList(List<T> list, Creator<T> c)
でArrayListを作成して読み込もうとしましたが、動作しません。
ArrayListを使用しているので、ArrayListの空のスロットで問題が発生する可能性があると考えて、trimToSize()
を使用して容量を実際のサイズに調整しました。しかしもう一度、これはそうではありません...
マーシャリングされたStatStructHistory
には、すべての属性またはリスト項目が初期化されています。私はこのNullPointerException
がどこから来ているのか分かりません。
よろしく HTZ
私がしようとしないことにしました混乱した結果の数日後に、もうパーセル化可能なインタフェースを使用してください。今では、アプリケーションで定義されたグローバル変数を使用して、あるアクティビティから別のアクティビティにデータを渡します。 [グローバル変数を宣言する方法は?](http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables) – htz