フラグメントのライフサイクル全体にわたって保存したい状態がいくつかあります。例えば、画面が回転しても問題なく動作しますが、プロセスが強制終了されてディスクから復元されたとき(私はそれが動作すると思います)、ClassCastExceptionを取得します。 ここにいくつかのコードです:Androidでバンドルからデータを取得するときにClassCastExceptionが発生する
初期化:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
playlistsMap = new LinkedHashMap<Section, List<Playlist>>();
} else {
playlistsMap = (LinkedHashMap<Section, List<Playlist>>) savedInstanceState.getSerializable(PLAYLISTS_MAP_KEY);
}
setHasOptionsMenu(true);
}
セーブデータ:
@Override
public void onSaveInstanceState(Bundle outState) {
if (isEverySectionsLoaded()) {
outState.putSerializable(PLAYLISTS_MAP_KEY, playlistsMap);
} else {
outState.putSerializable(PLAYLISTS_MAP_KEY, new LinkedHashMap<Section, List<Playlist>>());
}
// ...
}
私はonCreate
にキャストから取得する例外:
04-10 01:06:43.430 E/AndroidRuntime(28549): FATAL EXCEPTION: main
04-10 01:06:43.430 E/AndroidRuntime(28549): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.android/com.mydomain.android.ui.MainActivity}:
java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.LinkedHashMap
私はそれが良いでしょう知っているが、 Androidでパーセルブルを使用することはできますが、まだ理解していませんそれがどうして起こるか?
アイデア?
私の場合、HashtableはsavedInstanceStateに保存されています。画面を回転させると、ハッシュテーブルが取得されますが、アプリがクラッシュした場合は、前述のとおり、ハッシュマップが取得され、クラスキャスト例外が発生します。あなたはこれに対して良い解決策または回避策を見つけることができましたか? – Nil