642 votes

Comment passer de l'objet à partir d'une activité à l'autre dans Android

Je suis en train de travailler sur l'envoi d'un objet de mon client de classe à partir d'un Activity et l'afficher dans un autre Activity.

Le code de la classe de la clientèle:

public class Customer {

    private String firstName, lastName, Address;
    int Age;

    public Customer(String fname, String lname, int age, String address) {

        firstName = fname;
        lastName = lname;
        Age = age;
        Address = address;

    }

    public String printValues() {

        String data = null;

        data = "First Name :" + firstName + " Last Name :" + lastName
        + " Age : " + Age + " Address : " + Address;

        return data;

    }

}

Je veux envoyer son objet à partir d'un Activity à l'autre et afficher les données sur les autres Activity.

Comment puis-je y parvenir?

758voto

Samuh Points 16564

Une option pourrait être de laisser votre classe personnalisée en œuvre Serializable interface et ensuite vous pouvez passer des instances de l'objet dans l'intention supplémentaire à l'aide de putExtra(Serializable..) variante de l' Intent#putExtra() méthode.

Le PSEUDO-code:

//to pass :
   intent.putExtra("MyClass", obj);  

// to retrieve object in second Activity
getIntent().getSerializableExtra("MyClass");

270voto

Mustafa Güven Points 2316

mettre en œuvre votre classe Sérialisable. Supposons que c'est votre classe d'entité:

import java.io.Serializable;

@SuppressWarnings("serial") //with this annotation we are going to hide compiler warning
public class Deneme implements Serializable {

public Deneme(double id, String name){
    this.id = id;
    this.name = name;
}

public double getId() {
    return id;
}
public void setId(double id) {
    this.id = id;
}
public String getName() {
    return this.name;
}
public void setName(String name) {
    this.name = name;
}

private double id;
private String name;

}

nous sommes l'envoi de l'objet appelé dénir à partir de X de l'activité pour Y activité. Quelque part dans X de l'activité;

Deneme dene = new Deneme(4,"Mustafa");
Intent i = new Intent(this, Y.class);
i.putExtra("sampleObject", dene);
startActivity(i);

En Y de l'activité de l'objet.

Intent i = getIntent();
Deneme dene = (Deneme)i.getSerializableExtra("sampleObject");

c'est tout.

107voto

SohailAziz Points 1873

En utilisant les variables statiques n'est pas bon génie logiciel pratique. La conversion de l'objet de champs dans les primitifs types de données peuvent être une vie d'enfer. À l'aide de serializable est ok mais ce n'est pas la performance efficace sur la plate-forme android. Parcelable est spécifiquement conçu pour androidand vous devez l'utiliser. ici est simple exemple de Passage d'objets personnalisés entre les activités #android

89voto

Ads Points 2567

Tout en appelant à une activité

Intent intent = new Intent(fromClass.this,toClass.class).putExtra("myCustomerObj",customerObj);

Dans toClass.java recevoir de l'activité par

Customer customerObjInToClass = getIntent().getExtras().getParcelable("myCustomerObj");

assurez-vous que la clientèle de la classe implémente parcelable

public class Customer implements Parcelable {

    private String firstName, lastName, Address;
    int Age;

    /* all your getter and setter methods */

    public Customer(Parcel in ) {
        readFromParcel( in );
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public LeadData createFromParcel(Parcel in ) {
            return new Customer( in );
        }

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


    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(firstName);
        dest.writeString(lastName);
        dest.writeString(Address);
        dest.writeInt(Age);
    }

    private void readFromParcel(Parcel in ) {

        firstName = in .readString();
        lastName = in .readString();
        Address = in .readString();
        Age = in .readInt();
    }

77voto

Steven Mark Ford Points 342

Dans mon expérience, il ya 3 principales solutions, chacune avec leurs avantages et des inconvénients:

  1. La Mise En Œuvre De Parcelable

  2. La Mise En Œuvre De Serializable

  3. À l'aide d'un poids léger événement de bus de la bibliothèque, de la sorte (par exemple, Greenrobot de l'EventBus ou Square Otto)

Parcelable - rapide, Android standard, mais a beaucoup de code réutilisable et nécessite des chaînes codées en dur pour référence lors de l'extraction de valeurs de l'objet (non-fortement typé).

Serializable - proche de zéro standard, mais est le plus lent approche et exige également des chaînes codées en dur quand on tire les valeurs de l'objet (non-fortement typé).

Événement de Bus - zéro passe-partout, approche plus rapide, ne nécessite pas de chaînes codées en dur, mais nécessite un supplément de dépendance (bien que généralement léger, ~40 ko)

J'ai réalisé une comparaison détaillée autour de ces trois approches, y compris l'efficacité des repères. Si vous êtes intéressé, vous pouvez le trouver ici: Les Objets De Passage Entre Android Activités

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: