onRestoreInstanceState()でVectorを復元するためにClassCastExceptionがランダムに発生します。 一般的にベクトルの復元は正常に終了しますが、例外が発生することがあります。onRestoreInstanceStateでClassCastExceptionが発生する
アクティビティがバックグラウンドになって破壊されたときに発生すると思われますが、わかりません。
アイデア?ありがとうございました。
Stack<LocationInfo> mLocationInfoVector;
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable("locationInfos", mLocationInfoVector);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getSerializable("locationInfos") != null) {
@SuppressWarnings("unchecked")
mLocationInfoVector= (Stack<LocationInfo>) savedInstanceState.getSerializable("locationInfos");
}
super.onRestoreInstanceState(savedInstanceState);
}
を追加しました:
私は、例外ログを添付するのを忘れました。
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Stack
次のように 'onRestoreInstanceState'メソッドを書き直すことをお勧めします:' Object saved = savedInstanceState.getSerializable( "locationInfos"); if(stored instanceof Stack){mLocationInfoVector =(Stack)が保存されました。 }}} else if(saved!= null){Log.e( "RestoreBug"、 "復元されたオブジェクトクラス:" + saved.getClass()。getName()); } 'それで、少なくともあなたが戻ってくるものを見ることができます。 (コメントにコードを投稿して申し訳ありません;私はこれを回答として投稿したくありません)。 –
私はそんなことを考えましたが、どのような仕組みがこのケースを作り出しているのか本当に知りたいのです。私は例外ログを追加しました。オブジェクト型がArrayListに変更された理由はわかりません。 – chris
万が一、あなたのアクティビティスーパークラスが 'onSaveInstanceState'をオーバーライドしていますか?私はあなたのコードのどこにでも '' locationInfos "'キーを使っているのだろうかと思います。 (いずれにしても、 'onRestoreInstanceState'コードを再編成して' getSerializable() 'を1回だけ呼び出すようにしてください)。 –