Android Intent 数据传递与回传详解

4 下载量 46 浏览量 更新于2024-08-29 1 收藏 54KB PDF 举报
"Android应用中使用Intent进行数据传递和回传的方法详解" 在Android开发中,Intent是一个非常关键的组件,用于在不同组件之间传递数据和启动操作。本资源主要探讨了如何通过Intent在两个页面间传递数据以及如何将数据回传到原始页面。 1. Intent数据传递 - 单个数据传递:在`MainActivity`中,创建一个新的Intent实例,并使用`putExtra()`方法将数据存储到Intent中。例如,可以传递一个字符串数据: ```java Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("name", et_name.getText().toString().trim()); intent.putExtra("pass", et_pass.getText().toString().trim()); startActivity(intent); ``` 在`SecondActivity`中,通过调用`getIntent()`获取Intent对象,然后使用`getStringExtra()`或`getIntExtra()`等方法取出数据: ```java Intent intent = getIntent(); String name = intent.getStringExtra("name"); String pass = intent.getStringExtra("pass"); tv_name.setText("用户名为:" + name + "\n密码为:" + pass); ``` - 打包传递多个数据:如果需要传递多个数据,可以使用`Bundle`对象来组合数据,然后将Bundle附加到Intent中: ```java Intent intent = new Intent(MainActivity.this, SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("name", et_name.getText().toString().trim()); bundle.putInt("age", Integer.parseInt(et_age.getText().toString().trim())); intent.putExtra("bundle_data", bundle); startActivity(intent); ``` 在接收端,同样通过Intent获取Bundle,然后从Bundle中提取数据: ```java Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra("bundle_data"); String name = bundle.getString("name"); int age = bundle.getInt("age"); ``` 2. 数据回传 - 使用结果回调:若需要从`SecondActivity`返回数据给`MainActivity`,可以使用`startActivityForResult()`启动`SecondActivity`,并重写`onActivityResult()`方法: ```java Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, REQ_CODE); ``` 在`SecondActivity`中,通过`setResult()`设置返回结果,然后调用`finish()`关闭当前Activity: ```java Intent resultIntent = new Intent(); resultIntent.putExtra("back_data", "返回的数据"); setResult(RESULT_OK, resultIntent); finish(); ``` `MainActivity`的`onActivityResult()`方法会接收到这些数据: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQ_CODE && resultCode == RESULT_OK) { String backData = data.getStringExtra("back_data"); // 处理返回的数据 } } ``` 3. 隐式与显式页面跳转 - 显式跳转:如示例中所示,直接指定目标Activity的类名,适用于知道确切接收方的情况。 - 隐式跳转:通过设置Intent的Action、Category、Data等信息,让系统匹配能够处理该Intent的Activity,适用于不确定接收方或公开API时。 请注意,为了安全和性能考虑,应避免传递大量数据或敏感信息。如果数据量大,可以考虑使用Parcelable接口或序列化对象,或者使用其他机制如存储到数据库或文件中,然后通过Intent传递一个标识来定位数据。对于敏感信息,最好使用加密手段来保护。