首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Intent.putExtra传递Parcelable的数组

是一种在Android开发中传递复杂数据结构的方法。Parcelable是Android提供的一种序列化接口,用于将对象转换为字节流,以便在不同组件之间传递。

传递Parcelable的数组可以通过以下步骤实现:

  1. 创建一个实现了Parcelable接口的类,用于表示数组中的每个对象。该类需要实现Parcelable接口的方法,包括describeContents()writeToParcel(Parcel dest, int flags)
  2. 在发送方的Activity或Fragment中,创建一个Parcelable数组,并将要传递的对象添加到数组中。
  3. 创建一个新的Intent对象,并使用putExtra()方法将Parcelable数组添加到Intent中。使用一个唯一的键来标识该数组。

示例代码如下:

代码语言:java
复制
// 步骤1:创建实现Parcelable接口的类
public class MyObject implements Parcelable {
    private String name;
    private int age;

    // 构造函数
    public MyObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Parcelable接口方法
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    // Parcelable接口的CREATOR
    public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() {
        @Override
        public MyObject createFromParcel(Parcel source) {
            return new MyObject(source);
        }

        @Override
        public MyObject[] newArray(int size) {
            return new MyObject[size];
        }
    };

    // 从Parcel中读取数据
    private MyObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // 其他getter和setter方法
    // ...
}

// 步骤2:创建Parcelable数组并添加对象
MyObject[] myObjects = new MyObject[2];
myObjects[0] = new MyObject("John", 25);
myObjects[1] = new MyObject("Jane", 30);

// 步骤3:将Parcelable数组添加到Intent中
Intent intent = new Intent(this, ReceiverActivity.class);
intent.putExtra("myObjects", myObjects);
startActivity(intent);

在接收方的Activity或Fragment中,可以通过以下方式获取传递的Parcelable数组:

代码语言:java
复制
// 接收Parcelable数组
MyObject[] myObjects = getIntent().getParcelableArrayExtra("myObjects");

这样,你就可以在不同的组件之间传递Parcelable的数组了。

推荐的腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/tpns)可以用于在移动应用中实现消息推送功能,方便实现跨组件传递数据的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android中传值Intent与Bundle区别小结

前言 Bundle 翻译成中文意思是“捆绑”,常用在Activity间传递参数,之前一开始并不太待见,原因是Intent本身就可以传递Intent.putExtra(“key”, value),为何还要用...正巧小伙伴问Android传值Intent和Bundle区别,特此总结下: Intent与Bundle在传值上区别 首先从使用上: Intent方式: 假设需要将数据从页面A传递到B,然后再传递到C...Bundle内部是由ArrayMap实现,ArrayMap内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value,内部使用二分法对key进行排序,所以在添加、删除...因为使用Bundle场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用...而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速进行数据序列化和反序列化,系统封装了Bundle类,方便我们进行数据传输。

1.7K20

Activity之间数据传递方法汇总

Intent 应该是系统提供支持类型最广,功能最全面的传递方式了。基本数据类型、复杂数据类型(如数组、集合)、自定义数据类型等等都能支持,而且使用起来也不复杂。...、复杂数据类型传递 Java 中也定义了一些常用复杂类型,比如 String、基本数据类型数组、ArrayList、HashMap 等等,Intent 也对它们做了支持,使得我们能很容易通过 Intent...: intent.putExtra(String name, Parcelable value); intent.getParcelableExtra(String name); 这两种实现序列化方法使用原则...: 1)在使用内存时候,Parcelable 比 Serializable 性能高,所以推荐使用 Parcelable。...3)Parcelable 不能使用在要将数据存储在磁盘上情况,因为 Parcelable 不能很好保证数据持续性在外界有变化情况下。

3.2K40
  • Android中Parcelable使用详解

    Parcelable与Serializable Serializable是Java为我们提供一个标准化序列化接口。 Parcelable是Android为我们提供序列化接口。...对比: 1、Parcelable相对于Serializable使用相对复杂一些。 2、Parcelable效率相对Serializable也高很多。...3、Parcelable不能使用在要将数据存储在磁盘上情况,因为Parcelable在外界有变化情况下不能很好保证数据持续性。...简单使用: 进行Android开发时候,无法将对象引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。...中Parcelable使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

    2.1K50

    Intent传递数据全解

    概述 之前博文也有介绍,查看—->用户界面开发基础 这里单独抽取出来,更加详细记录一下,其实主要是API使用。 ---- Intent传递简单数据 ?...---- Intent传递数组 写入数组: bd.putStringArray("StringArray", new String[]{"xx","oo"}); //可把StringArray换成其他数据类型...传递对象方式有两种:将对象转换为Json字符串或者通过Serializable,Parcelable序列化 不建议使用Android内置抠脚Json解析器,可使用fastjson或者Gson第三方库...1)在使用内存时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。...3)Parcelable不能使用在要将数据存储在磁盘上情况,因为Parcelable不能很好保证数据 持续性在外界有变化情况下。

    90240

    Android 最全 Intent 传递数据姿势

    ,所以说 Intent 是组件之间通信使者,一般情况下,我们传递都是一些比较简单数据,并且都是基本数据类型,写法也比较简单,今天我在这里说是如何使用 Intent 传递对象及集合,我们知道Intent...putExtra 方法然后传递过去,Bundle 类默认也是已经实现了 Parcelable 接口,所以可以传递 Bundle 对象。...另外,默认 Intent 帮我们实现了,可以支持传递 String 数组等,也比较简单,这里就不赘述了,另外如果数据量比较大情况下,建议使用第三方框架来进行传递数据,例如:EventBus 等来代替,...Serializable 和 Parcelable 接口区别: 在使用内存时候,Parcelable 比 Serializable 性能高,所以推荐使用 Parcelable; Serializable...在序列化时候会产生大量临时变量,从而引起频繁 GC; Parcelable 不能使用在要将数据存储在磁盘上情况,因为 Parcelable 不能很好保证数据 持续性,在外界有变化情况下,

    2.8K21

    Intent传递对象两种方法

    Android为intent提供了两种传递对象参数类型方法 分别需要使实体类实现Serializable接口、Parcelable接口 首先我们要知道,传递对象,需要先将对象序列化 一、那么为什么要对象序列化... 1、永久性保存对象,保存对象字节序列到本地文件中;  2、用过序列化对象在网络中、进程间传递对象; 二、序列化对象什么时候实现Serializable接口,什么时候实现Parcelable接口接口...1、Parcelable不能使用将数据存储在磁盘上,因为Parcelable在外界有变化情况下不能很好保存数据持续性。    ...因此在这种情况下,建议使用Serializable 2、在使用内存时候,Parcelable比Serializable性能高,所以推荐使用Parcelable类。      ...--------------------------------------------------------------------------------------------- 下面看下两种传递对象方式使用方法

    1.6K60

    Activity之间传递大数据问题

    但是笔者所做项目用到了使用Intent 传递Bitmap图片对象,图片数据量相对来说是比较大,那么intent能否胜任传递图片任务呢?...首先很明显bitmap实现了Android中Parcelable接口,可以序列化。因此理所当然能够通过intent传递,然而图片大小有没有限制呢?...如果想传递图片那么建议使用其他方式,附录里提供了三种传递图片方式。 下面谈谈我们如何通过Intent组件传递大数据 传递bitmap对象 1。...如果是本地res中资源文件可以用intent.putExtra("id", R.id.xxx);传递一个对应id过去。在新activity中通过id取出图片。...因为intent只能传递实现序列化类,即继承java Serializable接口或者androidParcelable接口。drawable没有实现该接口所以不能传递。 3.

    2.7K90

    Kotlin入门(21)活动页面的跳转处理

    ,如果使用Java编码,可以很轻松地调用Intent对象putExtra方法,通过“putExtra(参数名, 参数值)”方式传递消息,就像下面代码那样:     Intent intent = new...intent.putExtra("request_content", et_request.getText().toString());     startActivity(intent); 如果使用Anko...Activity之间传递参数类型,除了整型、浮点数、字符串等基本数据类型,还允许传递序列化结构如Parcelable对象。...譬如前面的活动跳转传递了两个字段数据,如果把这两个字段放到Parcelable对象中,仅仅包含两个字段Parcelable类对应Java代码也如下面这般冗长: public class MessageInfo...,现在能在Kotlin中使用序列化对象注解了。

    1.7K30

    在Android Studio中Parcelable插件简单使用教程

    在Android Studio中,你可以很快速使用Parcelable插件进行实体类序列化实现,使用该插件后,你实体类可以快速实现Parcelable接口而不用写额外代码。...首先需要下载该插件: 在File- Setting- Plugins里搜索框内输入内容:android parcelable code generator,然后自己下载好重启studio即可使用该插件了...点击右键弹出提示框,选择Parcelable生成即可: ? 序列化时选择需要属性: ? 最后是自动生成代码,也表示成功实现了Parcelable接口: ? 怎么样?...是不是很高效就实现了Parcelable接口! 哦对了,使用该插件需要你先自己准备好实体类属性。...以上这篇在Android Studio中Parcelable插件简单使用教程就是小编分享给大家全部内容了,希望能给大家一个参考。

    3.6K20

    Android序列化之Parcelable和Serializable使用详解

    实现序列化必要条件 一个对象要实现序列化操作,该类就必须实现了Serializable接口或者Parcelable接口,其中Serializable接口是在java中序列化抽象类,而Parcelable...(writeObject) 完成,这个过程包含大量I/O操作,使用比较简单,但需要考量性能影响。...使用场景:将对象持久化到存储介质或者通过网络传输。 (2)Parcelable接口是Android平台下序列化接口,通常跨进程传递数据都要正确实现这个接口,比如Intent,Bitmap等。...Parcelable实现起来比Serializable复杂,但性能较好。使用场景:在内存中实现序列化,例如跨进程传递。...2.自定义一个类让其实现Parcelable,大致流程是什么? (1)首先实现Parcelable接口,并实现接口中方法。

    1.6K10

    Android 进阶6:两种序列化方式 Serializable 和 Parcelable

    例如,通过将对象序列化到剪贴板,可在不同应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。...在安卓开发中,我们在组件中传递数据时常常使用 Intent 传输数据时需要传递 Serializable 或者 Parcelable 数据,比如 Intent.putExtra 方法: public...也会使用 Binder 传递数据。 今天就来介绍下这两种序列化方式。...总结 可以看到,Serializable 使用比较简单,创建一个版本号即可;而 Parcelable 则相对复杂一些,会有四个方法需要实现。...而在运行时数据传递时建议使用 Parcelable,比如 Intent,Bundle 等,Android 底层做了优化处理,效率很高。

    1.5K50

    Go语言函数间传递数组问题

    大家都知道,Go 语言中,数组是分配连续内存,也就是说,在函数中传递一个大数组,代价是很高,例如: // 声明了一个8 MB 数组 // 8 * 10^8 = 8 * 100000000 Bit...array := [1e6]int // 将入有个 foo() 函数 foo(array) 这样的话,每次调用 foo() 函数时候,都会在栈上分配8 MB 内存,因为函数之间传递变量时,是值传递...,也就是不管这个变量数组有多大,都会完整复制,然后传递给函数。...如下: // 声明了一个8 MB 数组 // 8 * 10^8 = 8 * 100000000 Bit array := [1e6]int // 将入有个 foo() 函数 foo(&array)...这样开销就小得多了,因为这个参数其实是将数组地址传入了函数,而不是数组本身值,而一个内存地址,只需要在展示栈上分配8个字节就够用了。

    1.1K20

    Android Intent传递数据大小限制详解

    使用Intent传送数据时,可能会出现异常 在Intent中传入一个Parcelable对象;例如传入一个bitmap对象。...(K_PIC, b1); 选择bitmap原因是,Bitmap实现了Parcelable接口,并且可以通过getByteCount()得知所占内存大小。...Intent携带信息大小受Binder限制 Intent携带信息大小其实是受Binder限制。本文标题也可以改为“Binder传递数据大小限制”。...数据以Parcel对象形式存放在Binder传递缓存中。 如果数据或返回值比传递buffer大,则此次传递调用失败并抛出TransactionTooLargeException异常。...多个地方在进行传输时,即时它们各自传输数据不超出大小限制,TransactionTooLargeException异常也可能会被抛出。 在使用Intent传递数据时,1Mb并不是安全上限。

    2.5K20
    领券