安卓putExtra()方法在Java和Kotlin中的代码示例

555 阅读3分钟

Android的Intent 类通常用于从一个活动转移到另一个活动。

Intent 类有一个名为putExtra() 的方法,你可以用它来把扩展数据放到意图中。

putExtra() 方法的主要用途是发送你在下一个活动中需要的值。

该方法需要两个参数:

  • name ,以便以后识别和检索该值(String 类型)
  • 你想发送的value ,由你定义为第一个参数的name 识别(任何有效类型)。

例如,假设你想从MainActivity 发送一个Hello World! 字符串到SecondActivity ,你是这样做的:

// In MainActivity class
Intent secondActivityIntent = new Intent(this, SecondActivity.class);
secondActivityIntent.putExtra("message", "Hello World!");
startActivity(secondActivityIntent);

首先,你创建一个新的Intent 对象。然后,你从该对象中调用putExtra() 方法。

第一个参数是额外的name ,在上面的例子中是message

SecondActivity 类中,你可以使用getStringExtra() 方法来检索额外的东西:

// In SecondActivity class
String msg = getIntent().getStringExtra("message");
Log.d("org.metapx.javaapp", msg);

上面的msg 变量将包含保存在message 名称标识符下的Hello World! 字符串。

Android有许多get__Extra() 方法,每个方法都是用来通过Intent 对象检索特定类型的额外内容。

如果你发送一个boolean 值,你需要使用getBooleanExtra() 检索它。

对于一个int 的值,你需要使用getIntExtra() ,以此类推。

Kotlin中的putExtra()方法

Kotlin中的putExtra() 方法的语法如下所示:

// In MainActivity class
val secondActivityIntent = Intent(this, SecondActivity::class.java)
secondActivityIntent.putExtra("message", "Hello World!")
startActivity(secondActivityIntent)

当检索额外的时候,你可以使用getExtra() 方法,如下所示:

// In SecondActivity class
val msg = intent.getStringExtra("message")

intent 字段将在引擎盖下调用getIntent() 方法,所以你不需要明确调用getIntent() 方法。

接下来,让我们学习一下如何通过

发送一个可序列化的对象作为一个额外的

使用一个Intent 对象来发送许多值是有点乏味的,因为你需要为每个值重复调用putExtra() 方法。

下面的例子显示了你如何使用Intent 对象发送三个值:

secondActivityIntent.putExtra("username", "Nathan");
secondActivityIntent.putExtra("age", 23);
secondActivityIntent.putExtra("isLegal", true);

你可以创建一个Serializable 类,用来将数据存储在一个对象中,而不是一个一个地发送额外的数据。

首先,创建一个实现了Serializable 接口的class 。对于我们的例子,让我们把它命名为Profile

class Profile implements Serializable {
String username;
int age;
boolean isLegal;
Profile(String username, int age, boolean isLegal) {
this.username = username;
this.age = age;
this.isLegal = isLegal;
}
}

在你的MainActivity 类中,创建一个新的Profile 对象,带着你要发送的数据到SecondActivity

putExtra() 方法将Profile 对象作为一个额外的对象发送:

// In MainActivity class
Profile prof = new Profile("Nathan", 23, true);
secondActivityIntent.putExtra("profile", prof);
startActivity(secondActivityIntent);

接下来,你需要从SecondActivity 类中获得profile 的额外内容。

使用getSerializableExtra() 方法来获取对象,然后将该对象作为Profile 类的类型来铸造:

// In SecondActivity class
Serializable s = getIntent().getSerializableExtra("profile");
Profile p = (Profile) s;
Log.d("org.metapx.javaapp", p.username); // Nathan
Log.d("org.metapx.javaapp", String.valueOf(p.age)); // 23
Log.d("org.metapx.javaapp", String.valueOf(p.isLegal)); // true

使用Serializable 类是一种在活动之间发送数据的好方法。

在Kotlin中,代码更短,因为你可以像这样创建一个Serializable 类型的data class

data class Profile(
val username: String,
val age: Int,
val isLegal: Boolean
) : Serializable

如下图所示,使用data class ,在你的MainActivity 类中创建数据:

// In MainActivity class
val prof = Profile(
"Nathan",
23,
true
)
secondActivityIntent.putExtra("profile", prof);
startActivity(secondActivityIntent);

然后在SecondActivity 类中检索数据。请记住,你需要将该对象铸造成data class 类型,如下图所示:

// In SecondActivity class
val p = intent.getSerializableExtra("profile") as Profile

现在你知道如何在活动之间发送和接收一个Serializable 对象了,在Java和Kotlin中都是如此。干得好!👍

结语

putExtra() 方法被用来在Android活动之间发送数据。

任何你作为额外的数据都将被包含在你启动的下一个活动所接收的Intent 对象中。

你可以使用get extra方法检索该extra。对于一个String 类型的值,使用getStringExtra() ,对于一个boolean 类型的值,使用getBooleanExtra() ,以此类推。

要想一次发送很多值,建议你发送一个Serializable 对象,而不是重复调用putExtra() 方法。

通过本教程,你已经看到如何在Kotlin和Java语言中使用putExtra()

我希望本教程能帮助你了解putExtra() 方法的工作原理。