2012-05-11 10 views
2

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別々のいくつかの部分を渡そうとしました。 StatStructCycleMatrixStructでは正常に動作しますが、StatStructHistoryではエラーがスローされます。

StatStructCycleでArrayListをアンマーシャリングしようとすると、NullPointerExceptionが表示されます。私は歴史の他の部分をコメントアウトしました。

writeTypedList(List<T> list)readTypedList(List<T> list, Creator<T> c)でArrayListを作成して読み込もうとしましたが、動作しません。

ArrayListを使用しているので、ArrayListの空のスロットで問題が発生する可能性があると考えて、trimToSize()を使用して容量を実際のサイズに調整しました。しかしもう一度、これはそうではありません...

マーシャリングされたStatStructHistoryには、すべての属性またはリスト項目が初期化されています。私はこのNullPointerExceptionがどこから来ているのか分かりません。

よろしく HTZ

+0

私がしようとしないことにしました混乱した結果の数日後に、もうパーセル化可能なインタフェースを使用してください。今では、アプリケーションで定義されたグローバル変数を使用して、あるアクティビティから別のアクティビティにデータを渡します。 [グローバル変数を宣言する方法は?](http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables) – htz

答えて

0

Problem unmarshalling parcelables

あなたのマーシャリングが成功した場合でも、nullの例外がある場合は、アンマーシャリングプロセスがまだ失敗する可能性がありますように見えます。デバッグ目的のために

、あなたのサブオブジェクトのそれぞれ一つずつをマーシャリングしてみてください。それらのどれかがエラーを起こしていないか確認し、問題を掘り下げてください。今は3つのオブジェクトを一度にunmarhsallしようとしていますが、問題がある場合にはそれを特定するのは難しいです(もしあれば)。それははっきりしていない場合は

、私はこれをしようと示唆しています:

bundle.putParcelable("allStatStruct", ass.StatStructCycle); 

それが動作する場合、試してみてください。

bundle.putParcelable("allStatStruct", ass.StatStructHistory); 

等...

関連する問題