Ho uno stato che voglio salvare attraverso il ciclo di vita di un frammento. Funziona bene quando lo schermo ruota, ad esempio, ma quando il processo è stato ucciso e ripristinato dal disco (penso che sia così che funziona), ottengo un ClassCastException. Ecco po 'di codice:ClassCastException durante il recupero dei dati dal bundle su Android
inizializzazione:
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);
}
Protezione dei dati:
@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>>());
}
// ...
}
L'eccezione ricevo dal cast in 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
So che è meglio usare parcelables su Android, ma ancora non capisco come potrebbe mai accadere.
Qualche idea?
Nel mio caso, Hashtable è stato salvato in acrossInstanceState. Quando ruoto lo schermo, otteniamo l'hashtable, ma nel caso in cui l'app si arresti in modo anomalo, come hai detto, otteniamo una Hashmap e quindi un'eccezione cast di classe. Sei riuscito a trovare qualche buona soluzione o soluzione per questo? – Nil