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?

1voto

Michael Geier Punkte 1375

Diese Frage wurde bereits von anderen Personen perfekt beantwortet, wenn Sie es selbst tun wollen.

Wenn Sie es vorziehen, den Großteil des Low-Level-Paketierungscodes zu kapseln oder zu verstecken, könnten Sie die Verwendung von einen Teil des Codes, den ich vor einiger Zeit geschrieben habe, um die Handhabung von Paketen zu vereinfachen.

Das Schreiben an ein Paket ist so einfach wie:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving);

wobei color eine Aufzählung und isDriving ein boolescher Wert ist, zum Beispiel.

Das Lesen von Paketen ist auch nicht viel schwieriger:

color = (CarColor)unparcelValue(CarColor.class.getClassLoader());
isDriving = (Boolean)unparcelValue();

Schauen Sie sich einfach das "ParceldroidExample" an, das ich dem Projekt hinzugefügt habe.

Schließlich wird auch der CREATOR-Initialisierer kurz gehalten:

public static final Parcelable.Creator<Car> CREATOR =
    Parceldroid.getCreatorForClass(Car.class);

1voto

FireAphis Punkte 6430

Es gibt viele Beispiele in den Android (AOSP) Quellen. Zum Beispiel, PackageInfo Klasse hat ein boolesches Mitglied requiredForAllUsers und wird wie folgt serialisiert:

public void writeToParcel(Parcel dest, int parcelableFlags) {
    ...
    dest.writeInt(requiredForAllUsers ? 1 : 0);
    ...
}

private PackageInfo(Parcel source) {
    ...
    requiredForAllUsers = source.readInt() != 0;
    ...
}

0voto

Samir.Gawas Punkte 1

Für API 29 und höher können wir verwenden

writeToParcel:

dest.writeBoolean(booleanFlag);

AusParzelleLesen:

booleanFlag = in.readBoolean()

Oder Wir können verwenden

writeToParcel:

dest.writeByte((byte) (booleanFlag ? 1 : 0));

AusParzelleLesen:

booleanFlag = in.readByte() != 0;

0voto

NightStorm Punkte 91

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