Ich habe Parcelable
unten ein Objekt erstellt, mein Objekt enthält ein List
Produkt. Wie gehe ich in meinem Konstruktor damit um, mein Parcelable
für das neu zu erstellen List
?
Ich habe alle im Paket verfügbaren Methoden überprüft und alles, was verfügbar ist, ist readArrayList(ClassLoader)
. Ich bin mir nicht sicher, ob dies der beste Ansatz ist. Ihr Rat wäre wirklich dankbar.
public class Outfits implements Parcelable {
private String url;
private String name;
private List<Product> products;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public void writeToParcel(Parcel dest, int flags) {
Log.v("", "writeToParcel..." + flags);
dest.writeString(url);
dest.writeString(name);
dest.writeList(products);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Outfits createFromParcel(Parcel in) {
return new Outfits(in);
}
public Outfits[] newArray(int size) {
return new Outfits[size];
}
};
@Override
public int describeContents() {
return 0;
}
/*** Here how do I populate my List of Products ***/
private Outfits(Parcel in) {
url = in.readString();
name = in.readString();
products = in.read ???????;
}
}
readList()
?Antworten:
Wenn die Klasse
Product
mit dem Paketprotokoll kompatibel ist, sollte das Folgende gemäß der Dokumentation funktionieren.quelle
writeList()
Objekte gemäß den von derwriteValue()
Methode beschriebenen Spezifikationen geschrieben werden. developer.android.com/reference/android/os/… Unter anderem heißt es, dass das Objekt serialisierbar sein kann.readList()
ist das Gegenstück zuwriteList()
und liest dieselben Daten.in.readList(products,null);
, der Ausnahmen wie ... abruft. Auslöser: android.os.BadParcelableException: ClassNotFoundException beim Aufheben der Marshalling-Funktion: com.example.MyApplication.Product. Die Variation, um die Liste zu lesen, die tatsächlich für mich funktioniert, istin.readList(products,Product.class.getClassLoader());
Zunächst muss Ihr Produktobjekt implementiert werden
Parcelable
.Und dann
dest.writeTypedList(products)
inwriteToParcel()
Methode verwenden.Verwenden Sie zum Schluss den folgenden Code, um die Liste zu analysieren:
Weitere Informationen finden Sie im offiziellen Dokument :
quelle
Nach meiner persönlichen Erfahrung ist http://www.parcelabler.com/ eine erstaunliche Website dafür. Sie erstellen einfach Ihre Klasse und kopieren sie, fügen sie in die Website ein und es wird eine Paketversion Ihrer Klasse generiert.
Ich habe es mit einer Klasse namens "Theme" getestet, die die folgenden Variablen enthielt:
Die Funktion writeToParcel lautet:
generierter Konstruktor:
BEARBEITEN: Stellen Sie sicher, dass das Kartenobjekt auch paketierbar ist!
quelle
Das sollte funktionieren:
quelle
products = new ArrayList<Product>(); in.readList(products, Product.class.getClassLoader());
auch
Parcelable
in der Produktklasse implementieren und dannin.readList(this.list, Product.class.getClassLoader());
wenn eine der oben genannten Lösungen nicht funktioniert hat.
quelle
Die andere Möglichkeit ist die Verwendung von readValue & writeValue .
Elemente der Liste sollten Parcelable implementieren
quelle
Bitte schön...
Stellen Sie sicher, dass "Products.java" mit Parcelable erweitert werden sollte
Schritt 1:
Schritt 2:
Schritt 3:
quelle
Angenommen, das
Product
wird implementiertParcelable
, können Sie dies zum Schreiben verwenden:und das zum lesen:
quelle
Produkt muss Geräte Paketierbar sein
Dann schreiben Sie Ihr Objekt enthält Liste wie
quelle