ClassCastException se produce al azar para restaurar Vector en onRestoreInstanceState(). Generalmente, el vector de restauración está bien acabado, pero a veces se produce una excepción.ClassCastException se produce en onRestoreInstanceState
Creo que sucede cuando la actividad se va al fondo y se destruye, pero no estoy seguro.
¿Alguna idea? Gracias.
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);
}
añadido:
olvidé de adjuntar registro de excepciones. Es decir
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Stack
Sugiero que reescriba su método 'onRestoreInstanceState' como sigue:' Object saved = savedInstanceState.getSerializable ("locationInfos"); if (instancia de Stack guardada) {mLocationInfoVector = (Stack) guardada; } else if (saved! = null) {Log.e ("RestoreBug", "clase de objeto restaurado:" + saved.getClass(). getName()); } 'Entonces, al menos, puedes ver lo que estás recuperando. (Perdón por publicar el código en un comentario; no quiero publicar esto como respuesta). –
Pensé de esa manera, pero realmente quiero saber qué mecanismo hace este caso. Agregué el registro de excepción y no sé por qué el tipo de objeto se cambia a ArrayList. – chris
¿Por casualidad su superclase de actividad invalida 'onSaveInstanceState'? Me pregunto si está usando la tecla '" locationInfos "' en cualquier otro lugar de su código. (P.S. en cualquier caso, debe reorganizar su código 'onRestoreInstanceState' para que solo llame a' getSerializable() 'una vez.) –