353 Stimmen

Wie kann ich meine benutzerdefinierten Objekte paketfähig machen?

Ich versuche, meine Objekte parzellierbar zu machen. Ich habe jedoch benutzerdefinierte Objekte und diese Objekte haben ArrayList Attribute von anderen benutzerdefinierten Objekten, die ich erstellt habe.

Wie lässt sich dies am besten bewerkstelligen?

7voto

Rjz Satvara Punkte 3453

Ich habe den einfachsten Weg gefunden, eine Klasse der paketfähigen Waren

enter image description here

1voto

Es ist sehr einfach, Sie können ein Plugin auf Android Studio verwenden, um Objekte Parcelables zu machen.

public class Persona implements Parcelable {
String nombre;
int edad;
Date fechaNacimiento;

public Persona(String nombre, int edad, Date fechaNacimiento) {
    this.nombre = nombre;
    this.edad = edad;
    this.fechaNacimiento = fechaNacimiento;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.nombre);
    dest.writeInt(this.edad);
    dest.writeLong(fechaNacimiento != null ? fechaNacimiento.getTime() : -1);
}

protected Persona(Parcel in) {
    this.nombre = in.readString();
    this.edad = in.readInt();
    long tmpFechaNacimiento = in.readLong();
    this.fechaNacimiento = tmpFechaNacimiento == -1 ? null : new Date(tmpFechaNacimiento);
}

public static final Parcelable.Creator<Persona> CREATOR = new Parcelable.Creator<Persona>() {
    public Persona createFromParcel(Parcel source) {
        return new Persona(source);
    }

    public Persona[] newArray(int size) {
        return new Persona[size];
    }
};}

1voto

Deepak J Punkte 144

Ich habe versucht, Parcellable zu verwenden, aber die Zeit war knapp, also habe ich Gson wie unten beschrieben verwendet. Vielleicht könnte es einige andere helfen...

PersonData personData;
BusinessData businessData;

Die beiden oben genannten sind Modellobjekte. Ich wollte es an MainActivity.class von LoginActivity.class übergeben. Parcellable war nicht mit riesigen Modellen arbeiten und würde Zeit, um Änderungen zu machen Also habe ich dies,

startActivity(
    new Intent(LogInActivity.this, MainActivity.class)
    .putExtra("businessData", new Gson().toJson(businessData))
    .putExtra("personData", new Gson().toJson(personData))
);

Rufen Sie diese Objekte in MainActivity.class ab

BusinessData businessData = new Gson().fromJson(getIntent().getStringExtra("businessData"), BusinessData.class);
PresonData personData = new Gson().fromJson(getIntent().getStringExtra("personData"), PersonData.class);

0voto

Shubham Shukla Punkte 958

Jetzt können Sie Paketbote Bibliothek, um eine beliebige benutzerdefinierte Klasse in parcelable zu konvertieren. Annotieren Sie einfach Ihre POJO-Klasse mit @Parzelle . z.B.

    @Parcel
    public class Example {
    String name;
    int id;

    public Example() {}

    public Example(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() { return name; }

    public int getId() { return id; }
}

können Sie ein Objekt der Klasse Example erstellen und durch Parcels wickeln und als Bündel durch Intent versenden. z.B.

Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));

Um ein Objekt der benutzerdefinierten Klasse zu erhalten, verwenden Sie einfach

Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));

0voto

Md. Sajedul Karim Punkte 6961

Android Parcable hat einige einzigartige Eigenschaften. Diese sind im Folgenden aufgeführt:

  1. Sie müssen Parcel in der gleichen Reihenfolge lesen, in der Sie Daten auf Parcel eingeben.
  2. Das Paket leert sich nach dem Auslesen des Pakets. Das heißt, wenn Sie 3 Daten auf Ihrer Parzelle haben. Dann wird das Paket nach 3-maligem Lesen leer sein.

Beispiel: Um eine Klasse Parceble zu machen, muss sie Parceble implementieren. Percable hat 2 Methoden:

int describeContents();
void writeToParcel(Parcel var1, int var2);

Angenommen, Sie haben eine Person Klasse und es hat 3 Feld, Vorname, Nachname und Alter. Nach der Implementierung der Schnittstelle "Parceble" wird diese Schnittstelle wie folgt dargestellt:

import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable{
    private String firstName;
    private String lastName;
    private int age;

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(firstName);
        parcel.writeString(lastName);
        parcel.writeInt(age);
    }

}

Aquí writeToParcel Methode werden Daten auf Parcel in einem Auftrag geschrieben/hinzugefügt. Danach müssen wir den folgenden Code zum Lesen der Daten aus dem Paket hinzufügen:

protected Person(Parcel in) {
        firstName = in.readString();
        lastName = in.readString();
        age = in.readInt();
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

Hier nimmt die Personenklasse ein Paket und erhält die Daten in derselben Reihenfolge beim Schreiben.

Jetzt bei Vorsatz getExtra y putExtra Code ist unten angegeben:

Extra einlegen :

Person person=new Person();
                person.setFirstName("First");
                person.setLastName("Name");
                person.setAge(30);

                Intent intent = new Intent(getApplicationContext(), SECOND_ACTIVITY.class);
                intent.putExtra()
                startActivity(intent); 

Extra erhalten:

Person person=getIntent().getParcelableExtra("person");

Die vollständige Personenklasse ist unten angegeben :

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable{
    private String firstName;
    private String lastName;
    private int age;

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(firstName);
        parcel.writeString(lastName);
        parcel.writeInt(age);
    }

    protected Person(Parcel in) {
        firstName = in.readString();
        lastName = in.readString();
        age = in.readInt();
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

}

Hope this will help you 
Thanks :)

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