android - studio - title html attribute
¿Cuál es el parámetro para Parcel.readStringArray()? (3)
Estoy tratando de guardar el estado en mi Fragment mediante el uso de Parcelable .
Esto me llevó al siguiente código cuando deseo recuperar la matriz de cadenas que guardé en el Parcelable:
public MyObject createFromParcel(Parcel in) {
titles=in.readStringArray(???);
}
Ahora readStringArray necesita un parámetro, una String[] ... ¿Pero por qué? Podría simplemente dar las cuerdas que almacené en él. No sé a priori cuántos eran, así que esto apesta. :(
La documentation dice lo siguiente:
Eso no es nada.
EDIT: si alguien tiene el mismo problema: terminé usando writeBundle() / readBundle() y poniendo mi String[] en el Bundle .
Aquí hay una implementación de este método desde Android 4.1.2:
public final void readStringArray(String[] val) {
int N = readInt();
if (N == val.length) {
for (int i=0; i<N; i++) {
val[i] = readString();
}
} else {
throw new RuntimeException("bad array lengths");
}
}
Entonces escribe valores a una matriz dada. Y no devuelve nada.
Creo que podría ser útil ver estos dos métodos, readStringArray(String[] val) y createStringArray() lado a lado:
Veamos primero el método readStringArray(String[] val) . Requiere una String[] como parámetro y puede resultar en una NullPointerException si pasa un objeto de matriz no inicializado ( null ). Además, tendrás que saber exactamente la longitud de la matriz (N), de lo contrario obtendrás la RuntimeException del método:
public final void readStringArray(String[] val) {
int N = readInt();
if (N == val.length) {
for (int i=0; i<N; i++) {
val[i] = readString();
}
} else {
throw new RuntimeException("bad array lengths");
}
}
Oh, por otra parte, con createStringArray() no es necesario que forme y proporcione un String[] como parámetro, el método lo formará con la longitud correcta, por lo que no tiene que preocuparse ya sea NullPointerException o RuntimeException :
public final String[] createStringArray() {
int N = readInt();
if (N >= 0) {
String[] val = new String[N];
for (int i=0; i<N; i++) {
val[i] = readString();
}
return val;
} else {
return null;
}
}
En general, como resultado de este análisis básico, podemos llegar a conclusiones y decir que el segundo método es mejor y más seguro.
Use createStringArray() lugar de readStringArray(String[]) . Le devolverá la matriz que necesita.