matrices tienen comportamiento polimórfico - únicos tipos genéricos no tienen.
Es decir, si Uri
implementa Parcelable
continuación
se puede decir:
Parcelable[] pa = new Uri[size];
Uri[] ua = (Uri[]) pa;
no se puede decir:
List<Parcelable> pl = new ArrayList<Uri>();
Como se ve podemos echar pa
de nuevo a Uri[]
. ¿Entonces cuál es el problema? Este ClassCastException
se produce cuando se elimina la aplicación y luego se vuelve a crear la matriz guardada. Cuando se recrea, el tiempo de ejecución no sabe qué tipo de matriz (Uri[]
) era, por lo que solo crea un Parcelable[]
y coloca elementos en él. De ahí el ClassCastException
cuando intentas convertirlo al Uri[]
.
Tenga en cuenta que la excepción no ocurre (teóricamente) cuando el proceso no se cancela y la matriz creada originalmente (Uri[]
) se reutiliza entre las salvaciones/restauraciones del estado. Como cuando cambias la orientación.
Solo quería aclarar POR QUÉ sucedió. Si quieres una solución @solo proporciona una solución decente.
Cheers
Publique la stacktrace. –
¿'Uri' hereda de' Parcelable' o al revés? – fge
Implementa Uri Parcelable –