Intent 传递数据

Intent 传递数据

@(Android)

Intent 传递简单数据


基本数据

SYNTAX
数据类型存数据取数据
StringputExtra(String name, String value)getStringExtra(String name)
intputExtra(String name, int value)getIntExtra(String name, int defaultValue)
EXAMPLES

这里写图片描述

数组

SYNTAX
数组类型存数据取数据
StringputExtra(String name, String[] value)getStringArrayExtra(String name)
intputExtra(String name, int[] value)getIntArrayExtra(String name)
EXAMPLES

存数据

Intent intent = new Intent(IntentTestActivity.this,IntentDataActivity.class);
intent.putExtra("StringArray",new String[]{"刘备","关羽","张飞"});
// value 可以为其他类型,如 int,float...数组
startActivity(intent);

取数据

Intent intent = getIntent();
String[] strArray = intent.getStringArrayExtra("StringArray");

集合

SYNTAX
数组类型存数据取数据
StringputStringArrayListExtra(String name, ArrayList<String> value)getStringArrayListExtra(String name)
IntegerputIntegerArrayListExtra(String name, ArrayList<Integer> value)getIntegerArrayListExtra(String name)
EXAMPLES

存数据

Intent intent = new Intent(IntentTestActivity.this,IntentDataActivity.class);
ArrayList<String> strList = new ArrayList<>();
strList.add(0,"刘备");
strList.add(1,"关羽");
strList.add(2,"张飞");
intent.putStringArrayListExtra("StringList",strList);
startActivity(intent);

取数据

Intent intent = getIntent();
ArrayList<String> strList = intent.getStringArrayListExtra("StringList");

Intent 传递对象


SYNTAX

类型存数据取数据
1putExtra(String name, Serializable value)getSerializableExtra(String name)
2putExtra(String name, Parcelable value)getParcelableExtra(String name)
3putExtra(String name, Parcelable[] value)getParcelableArrayExtra(String name)
4putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)getParcelableArrayListExtra(String name)

EXAMPLES

存数据

Intent intent = new Intent(IntentTestActivity.this,IntentDataActivity.class);
Student student = new Student("吕布",30);
intent.putExtra("Student",student);
startActivity(intent);

取数据

Intent intent = getIntent();
Student student = intent.getParcelableExtra("Student");

Intent 传递Bitmap


直接传递

bitmap实现了Parcelable接口,可以直接传递。有大小限制!!(1MB)

发送Bitmap的Activity

Intent intent = new Intent(SendActivity.this, ReceiveActivity.class);
Bitmap bitmap = xxx; //xxx根据实际情况获取
intent.putExtra("BITMAP",bitmap);
startActivity(intent);

接收Bitmap的Activity

Intent intent = getIntent();
if(intent!=null){
    Bitmap bm = intent.getParcelableExtra("BITMAP");
}   

通过Bundle传递

发送Bitmap的Activity

Intent intent = new Intent(SendActivity.this, ReceiveActivity.class);
Bundle bundle = new Bundle();
Bitmap bitmap = xxx; //xxx根据实际情况获取
bundle.putParcelable("BITMAP", bitmap);
intent.putExtra("bundle", bundle);
startActivity(intent);

接收Bitmap的Activity

Intent intent = getIntent();
if(intent!=null){
    Bundle bundle = intent.getBundleExtra("bundle");
    Bitmap bm = bundle.getParcelable("BITMAP");
}   

通过byte[]传递

Bitmap和byte[]相互转换

Bitmap转byte[]

private byte[] convertBitmap2Bytes(Bitmap bm){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG,100,baos);
    return baos.toByteArray();
}

byte[]转Bitmap

private Bitmap convertBytes2Bitmap(byte[] buff){
    Bitmap bm = BitmapFactory.decodeByteArray(buff,0,buff.length);
    return bm;
}

实现代码

发送Bitmap的Activity

Intent intent = new Intent(SendActivity.this, ReceiveActivity.class);
byte[] buff = convertBitmap2Bytes(cover);
intent.putExtra("buff",buff);
startActivity(intent);

接收Bitmap的Activity

Intent intent = getIntent();
if(intent!=null){
    byte[] buff = intent.getByteArrayExtra("buff");
    Bitmap bm = convertBytes2Bitmap(buff);
}
### Android中使用Intent传递数据的方法和示例 在Android开发中,`Intent` 是一种用于在不同组件之间传递数据和执行操作的机制。它可以用于启动Activity、Service或BroadcastReceiver,并携带必要的数据[^1]。 #### 1. 基本数据类型的传递 通过 `Intent`,可以传递基本数据类型(如整数、浮点数、布尔值等)以及字符串。以下是具体实现方法和示例代码: - **发送数据**:使用 `putExtra()` 方法将数据附加到 `Intent` 中。 - **接收数据**:在目标Activity中通过 `getIntent()` 获取 `Intent` 对象,并调用相应的 `get...Extra()` 方法提取数据。 ```java // 发送数据 Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", value); // 替换 "key" 和 value 为实际键值对 startActivity(intent); // 接收数据 Intent intent = getIntent(); String data = intent.getStringExtra("key"); // 提取与 "key" 对应的字符串值 ``` 例如,传递一个字符串: ```java // 发送组件 Intent intent = new Intent(this, ReceiverActivity.class); intent.putExtra("message", "Hello, World!"); startActivity(intent); // 接收组件 String message = getIntent().getStringExtra("message"); Log.d("ReceiverActivity", "Received message: " + message); ``` 上述代码展示了如何在两个Activity之间传递字符串数据[^2]。 --- #### 2. 传递对象 除了基本数据类型,还可以通过 `Intent` 传递自定义对象。这需要确保对象实现了 `Serializable` 或 `Parcelable` 接口。 - **使用 Serializable**: - 实现 `Serializable` 接口的对象可以直接通过 `putExtra()` 方法传递。 ```java // 定义一个可序列化的类 public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getter 和 Setter 方法 } // 发送对象 Person person = new Person("John Doe", 30); Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("person", person); startActivity(intent); // 接收对象 Intent intent = getIntent(); Person person = (Person) intent.getSerializableExtra("person"); Log.d("TargetActivity", "Name: " + person.getName() + ", Age: " + person.getAge()); ``` - **使用 Parcelable**: - 实现 `Parcelable` 接口可以提高性能,尤其是在传递复杂对象时。 ```java // 定义一个可打包的类 public class Person implements Parcelable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } protected Person(Parcel in) { name = in.readString(); age = in.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } @Override public int describeContents() { return 0; } public static final Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel in) { return new Person(in); } @Override public Person[] newArray(int size) { return new Person[size]; } }; // Getter 和 Setter 方法 } // 发送对象 Person person = new Person("Jane Doe", 25); Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("person", person); startActivity(intent); // 接收对象 Intent intent = getIntent(); Person person = intent.getParcelableExtra("person"); Log.d("TargetActivity", "Name: " + person.getName() + ", Age: " + person.getAge()); ``` --- #### 3. 其他数据类型 `Intent` 还支持传递其他复杂数据类型,例如文件路径、Bundle 等。例如,传递文件路径: ```java // 发送文件路径 String filePath = "/path/to/file"; Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("file_path", filePath); startActivity(intent); // 接收文件路径 String filePath = getIntent().getStringExtra("file_path"); File file = new File(filePath); ``` 如果需要传递更复杂的数据结构,可以考虑使用 `Bundle`: ```java // 使用 Bundle 传递多个键值对 Bundle bundle = new Bundle(); bundle.putString("key1", "value1"); bundle.putInt("key2", 42); Intent intent = new Intent(this, TargetActivity.class); intent.putExtras(bundle); startActivity(intent); // 接收 Bundle Bundle bundle = getIntent().getExtras(); String value1 = bundle.getString("key1"); int value2 = bundle.getInt("key2"); ``` --- ### 注意事项 - 在传递对象时,建议优先使用 `Parcelable` 而非 `Serializable`,因为前者性能更高。 - 确保接收端正确处理可能的空值情况,避免运行时异常。 - 如果需要在跨应用之间传递数据,可以结合 `ContentProvider` 使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值