协慌网

登录 贡献 社区

如何在 Android 上将对象从一项活动传递到另一项活动

我正在尝试从一个Activity发送客户类的对象并将其显示在另一个Activity

客户类的代码:

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;
    }
}

我想将其对象从一个Activity发送到另一个,然后在另一个Activity上显示数据。

我该如何实现?

答案

一种选择是让您的自定义类实现Serializable接口,然后您可以使用Intent#putExtra()方法的putExtra(Serializable..)变体在Intent#putExtra()传递对象实例。

伪代码

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

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

注意:确保主自定义类的每个嵌套类都实现了 Serializable 接口,以避免任何序列化异常。例如:

class MainClass implements Serializable {

    public MainClass() {}

    public static class ChildClass implements Serializable {

        public ChildClass() {}
    }
}

使用 Serializable 实现您的课程。让我们假设这是您的实体类:

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;
}

我们正在将名为dene的对象从 X 活动发送到 Y 活动。 X 活动中的某个位置;

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

在 Y 活动中,我们正在获取对象。

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

而已。

  • 使用全局静态变量不是良好的软件工程实践。
  • 将对象的字段转换为原始数据类型可能会很麻烦
  • 使用serializable 是可以的,但是在 Android 平台上性能不高
  • Parcelable 是专为 Android 设计的,您应该使用它。这是一个简单的示例: 在 Android 活动之间传递自定义对象

您可以使用此站点为您的课程生成 Parcelable 代码。