417 Stimmen

Wie kann man einen Booleschen Wert lesen/schreiben, wenn man die Schnittstelle Parcelable implementiert?

Ich versuche, eine ArrayList Parcelable um einer Aktivität eine Liste von benutzerdefinierten Objekten zu übergeben. Ich beginne mit dem Schreiben einer myObjectList Klasse, die die ArrayList<myObject> und umsetzen Parcelable .

Einige Eigenschaften von MyObject sind boolean sondern Parcel haben keine Methode read/writeBoolean .

Wie kann man das am besten handhaben?

8voto

Meghna Punkte 529
out.writeInt(mBool ? 1 : 0); //Write
this.mBool =in.readInt()==1; //Read

6voto

Pavel Shorokhov Punkte 3768

Kurze und einfache Implementierung in Kotlin mit löschbarer Unterstützung:

Methoden zum Paket hinzufügen

fun Parcel.writeBoolean(flag: Boolean?) {
    when(flag) {
        true -> writeInt(1)
        false -> writeInt(0)
        else -> writeInt(-1)
    }
}

fun Parcel.readBoolean(): Boolean? {
    return when(readInt()) {
        1 -> true
        0 -> false
        else -> null
    }
}

Und verwenden Sie es:

parcel.writeBoolean(isUserActive)

parcel.readBoolean()        // For true, false, null
parcel.readBoolean()!!      // For only true and false

5voto

Zar E Ahmer Punkte 32557

Ich habe Ihnen vorgeschlagen, wie Sie Parcelable am einfachsten implementieren können, wenn Sie Android Studio verwenden.

Gehen Sie einfach zu Datei->Einstellungen->Plugins->Repository durchsuchen und suchen Sie nach "parcelable" (siehe Bild).

enter image description here Es wird automatisch Parcelable erstellt.

Und es gibt auch eine Website, die dies ermöglicht. http://www.parcelabler.com/

3voto

fleetway76 Punkte 1590

Sie könnten Ihre booleschen Werte durch Maskierung und Verschiebung in ein Byte packen. Das wäre der effizienteste Weg und ist wahrscheinlich das, was man von Ihnen erwarten würde.

3voto

Octavian A. Damiean Punkte 39044

Es ist schwer, hier die eigentliche Frage zu erkennen. Ich vermute, es geht darum, wie man mit Booleschen Werten umgeht, wenn man die Parcelable Schnittstelle.

Einige Attribute von MyObject sind boolesch, aber Parcel hat keine Methode read/writeBoolean.

Sie müssen den Wert entweder als String oder als Byte speichern. Wenn Sie sich für einen String entscheiden, müssen Sie die statische Methode der String Klasse namens valueOf() um den booleschen Wert zu parsen. Es ist nicht so effektiv wie das Speichern in einem Byte tough.

String.valueOf(theBoolean);

Wenn Sie sich für ein Byte entscheiden, müssen Sie selbst eine Konvertierungslogik implementieren.

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

Beim Entsperren des Parcel Objekts müssen Sie sich um die Umwandlung in den ursprünglichen Typ kümmern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X