210 votos

Cómo leer / escribir un booleano en la aplicación de la interfaz Parcelable?

Estoy tratando de hacer una Parcelable ArrayList con el fin de pasar a una actividad de una lista personalizada object.I empezar a escribir una clase que se extiende myObjectList ArrayList e implementar Parcelable.

Algunos atributos de MyObject son booleano pero paquete no tienen ningún método de lectura / writeBoolean.

¿Cuál es la mejor manera de manejar esto?

561voto

B.Young Puntos 4486

Así es como yo lo haría ...

writeToParcel:

 dest.writeByte((byte) (myBoolean ? 1 : 0));     //if myBoolean == true, byte == 1
 

readFromParcel:

 myBoolean = in.readByte() != 0;     //myBoolean == true if byte != 0
 

44voto

Taig Puntos 1457

También puede hacer uso de la writeValue método. En mi opinión esa es la solución más sencilla.

 dst.writeValue( myBool );
 

Después se puede recuperar fácilmente con un simple molde de Boolean :

 boolean myBool = (Boolean) source.readValue();
 

Bajo el capó del Marco de Android va a tramitar como un entero:

 writeInt( (Boolean) v ? 1 : 0 );
 

9voto

Shaista Naaz Puntos 1934

se declara como este

  private boolean isSelectionRight;
 

escribir

  out.writeInt(isSelectionRight ? 1 : 0);
 

leer

 isSelectionRight  = (in.readInt() == 0) ? false : true;
 

tipo boolean necesita ser convertido a algo que apoya la parcela y por lo que puede convertirlo a int.

6voto

Geobits Puntos 12623

Normalmente los tengo en una matriz y llamo writeBooleanArray y readBooleanArray

Si se trata de un solo valor booleano que usted necesita para empacar, usted puede hacer esto:

 parcel.writeBooleanArray(new boolean[] {myBool});
 

3voto

Octavian Damiean Puntos 20620

Es difícil identificar la verdadera pregunta aquí. Supongo que es la forma de cómo lidiar con los booleanos cuando la aplicación de la Parcelable de interfaz.

Algunos atributos de MyObject son boolean, pero Parcela no tiene ningún método de lectura/writeBoolean.

Usted tendrá que almacenar el valor como una cadena o como un byte. Si usted va para una cadena, entonces usted tendrá que usar el método estático de la String clase llamada valueOf() a analizar el valor booleano. No es tan efectivo como el ahorro en un byte difíciles.

String.valueOf(theBoolean);

Si usted va para un byte tendrá que implementar una lógica de conversión de ti mismo.

byte convBool = -1;
if (theBoolean) {
    convBool = 1;
} else {
    convBool = 0;
}

Cuando unmarshalling la Parcel objeto, tiene que hacerse cargo de la conversión al tipo original.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: