Cómo pasar un objeto de una actividad a otra en Android
Estoy intentando trabajar para enviar un objeto de mi clase de cliente desde uno Activity
y mostrarlo en otro Activity
.
El código para la clase de cliente:
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;
}
}
Quiero enviar su objeto de uno Activity
a otro y luego mostrar los datos en el otro Activity
.
¿Cómo puedo lograr eso?
Una opción podría ser permitir que su clase personalizada implemente la Serializable
interfaz y luego pueda pasar instancias de objetos en la intención adicional usando la putExtra(Serializable..)
variante del Intent#putExtra()
método.
Código real :
En su modelo/clase de objeto personalizado:
public class YourClass implements Serializable {
En otra clase donde se utiliza el modelo/clase personalizada:
//To pass:
intent.putExtra("KEY_NAME", myObject);
myObject es de tipo "YourClass". Luego, para recuperar de otra actividad, use getSerializableExtra para obtener el objeto usando el mismo nombre de clave. Y se necesita encasillar en YourClass:
// To retrieve object in second Activity
myObject = (YourClass) getIntent().getSerializableExtra("KEY_NAME");
Nota: Asegúrese de que cada clase anidada de su clase personalizada principal haya implementado una interfaz serializable para evitar excepciones de serialización. Por ejemplo:
class MainClass implements Serializable {
public MainClass() {}
public static class ChildClass implements Serializable {
public ChildClass() {}
}
}
Implementa tu clase con Serializable. Supongamos que esta es su clase de entidad:
import java.io.Serializable;
@SuppressWarnings("serial") //With this annotation we are going to hide compiler warnings
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;
}
Estamos enviando el objeto llamado dene
de la actividad X a la actividad Y. En algún lugar de la actividad X;
Deneme dene = new Deneme(4,"Mustafa");
Intent i = new Intent(this, Y.class);
i.putExtra("sampleObject", dene);
startActivity(i);
En la actividad Y obtenemos el objeto.
Intent i = getIntent();
Deneme dene = (Deneme)i.getSerializableExtra("sampleObject");
Eso es todo.
Utilice gson para convertir su objeto a JSON y pasarlo a través de la intención. En la nueva Actividad, convierta el JSON en un objeto.
En tu build.gradle
, agrega esto a tus dependencias.
implementation 'com.google.code.gson:gson:2.8.4'
En su Actividad, convierta el objeto a json-string:
Gson gson = new Gson();
String myJson = gson.toJson(vp);
intent.putExtra("myjson", myjson);
En su Actividad receptora, convierta la cadena json nuevamente al objeto original:
Gson gson = new Gson();
YourObject ob = gson.fromJson(getIntent().getStringExtra("myjson"), YourObject.class);
Para Kotlin es más o menos lo mismo.
pasar los datos
val gson = Gson()
val intent = Intent(this, YourActivity::class.java)
intent.putExtra("identifier", gson.toJson(your_object))
startActivity(intent)
Recibir los datos
val gson = Gson()
val yourObject = gson.fromJson<YourObject>(intent.getStringExtra("identifier"), YourObject::class.java)