使用Intent传递参数

本文介绍了在Android应用程序中使用Intent和Bundle进行数据传递的方法。详细解释了如何在不同Activity之间通过putExtra()方法和Bundle对象传递字符串、整型数据及自定义对象。

1.使用PutExtra()传递参数
在mainActivity中设置Intent

Intent i = new Intent(MainActivity.this,AnotherAty.class);   
i.putExtra("name","john");
startActivity(i);

在第二个Activity中设置

Intent i = getIntent();
textView.setText(i.getStringExtra("data"));

2.使用Bundle传递参数

  1. 在mainActivity中设置
Intent i = new Intent(MainActivity.this,AnotherAty.class);
Bundle b = new Bundle();
b.putString("name","john");
b.putInt("age",2);
i.putExtras(b);
startActivity(i);

在第二个Activity中设置:

Intent i = getIntent();
Bundle data = i.getExtras();
textView.setText(String.format("name=%s,age=%d,name2=%s",
data.getString("name"),
data.getInt("age"),
data.getString("name1","leo")));
//第三个是使用默认的设置,当第三个name1为空是,选择默认的信息传递
  1. 也是使用Bundle传递参数

在MainActivity中这样设置

  Intent i = new Intent(MainActivity.this,AnotherAty.class);

                Bundle b = new Bundle();
                b.putString("name","john");
                b.putInt("age",2);
                i.putExtra("bundle",b);
                startActivity(i);

在另一个Activity中这样设置


        Intent i = getIntent();
        Bundle data = i.getBundleExtra("bundle");
        textView = (TextView) findViewById(R.id.text_view);
        textView.setText(String.format("name=%s,age=%d,name2=%s",data.getString("name"),data.getInt("age"),data.getString("name1","leo")));

传递值对象

使用Serializable序列化接口来实现:
先创建一个User类:

public class User implements Serializable {
    private String name;
    private int age;


    public void setName(String name) {
        this.name = name;
    }

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public User(String name,int age){
        this.name = name;
        this.age = age;
    }

}

在MainActivity中写入:

Intent i = new Intent(MainActivity.this,AnotherAty.class);

                i.putExtra("user", new User("John",20));
                startActivity(i);

随后,在另一个Activity中:

 Intent i = getIntent();
        textView = (TextView) findViewById(R.id.text_view);
        User user = (User) i.getSerializableExtra("user");
        textView.setText(String.format("User info(name = %s,age = %d)",user.getName(),user.getAge()));
<think>好的,我现在要帮用户了解Android中Intent如何传递参数。首先,用户的问题很明确,但作为新手,可能需要详细的步骤和示例。先回忆一下自己学过的知识,或者查资料确认正确性。 记得Intent传递参数主要用putExtra方法,可以传基本类型、字符串、数组等。比如用户提到的引用[1]和[4]中有示例代码,发送方用putExtra,接收方用getXXXExtra。另外,Bundle对象也可以用来打包数据,尤其是当需要传递多个参数时,可以用Bundle来组织,然后通过Intent传递Bundle。引用[4]提到Bundle的putSerializable和putParcelable方法,用于传递对象,这点需要注意,可能需要对象实现Serializable或Parcelable接口。 用户提供的引用中有多个例子,比如发送Activity的代码intent.putExtra("key","A》B页面"),接收方用getStringExtra。还有引用[4]中的两种方式传递对象,这可能涉及到复杂对象的传递,需要详细说明。 首先,我应该分步骤讲解,先讲基本类型,再讲Bundle,再讲对象。每个步骤给出代码示例,这样用户更容易理解。同时需要指出不同方法的适用场景,比如基本类型适合简单数据,Bundle适合多个数据,而Serializable和Parcelable适合对象。 另外,需要注意一些常见错误,比如接收方使用的key要和发送方一致,否则取不到数据。比如引用[1]中的接收方代码里,key后面有个空格,可能是笔误,应该提醒用户注意key的一致性。 还要提到Intent传递数据的大小限制,比如引用[1]提到的传递参数的大小限制,如果数据太大可能会引发问题,这时候应该考虑其他方法,比如全局变量或者持久化存储。 最后,生成相关问题的时候,可以包括传递对象的方法、数据大小限制、Bundle的使用等,帮助用户扩展知识。</think>### Android Intent 传递参数方法详解 Intent 在 Android 中用于组件间通信,支持多种参数传递方式,具体方法如下: --- #### **1. 基本数据类型传递** 通过 `putExtra()` 方法直接传递**基本类型**或**字符串**,接收方通过 `getXXXExtra()` 获取。 - **发送方代码示例**: ```java Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); intent.putExtra("name", "张三"); intent.putExtra("age", 25); startActivity(intent); ``` - **接收方代码示例**: ```java Intent intent = getIntent(); String name = intent.getStringExtra("name"); // key需完全一致 int age = intent.getIntExtra("age", 0); // 默认值0 ``` --- #### **2. 使用Bundle打包数据** 通过 `Bundle` 对象传递**多个参数**,适合复杂场景[^4]。 - **发送方代码示例**: ```java Bundle bundle = new Bundle(); bundle.putString("address", "北京"); bundle.putDouble("score", 95.5); Intent intent = new Intent(this, TargetActivity.class); intent.putExtras(bundle); startActivity(intent); ``` - **接收方代码示例**: ```java Bundle bundle = getIntent().getExtras(); String address = bundle.getString("address"); double score = bundle.getDouble("score"); ``` --- #### **3. 传递可序列化对象** 需对象实现 `Serializable` 或 `Parcelable` 接口[^4]。 - **发送方代码示例**: ```java // 实现Serializable的User类 User user = new User("李四", 30); intent.putExtra("user_data", user); ``` - **接收方代码示例**: ```java User user = (User) getIntent().getSerializableExtra("user_data"); ``` --- #### **4. 注意事项** - **Key一致性**:发送方和接收方的 key 必须完全匹配(包括大小写)[^1]。 - **数据大小限制**:Intent 传递数据建议不超过 1MB,否则可能触发 `TransactionTooLargeException`[^1]。 - **对象序列化选择**:`Parcelable` 性能优于 `Serializable`,推荐优先使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值