首页
学习
活动
专区
工具
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)可以用于在移动应用中实现消息推送功能,方便实现跨组件传递数据的需求。

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

相关·内容

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
  • 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不能很好的保证数据的 持续性在外界有变化的情况下。

    93540

    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接口或者android的Parcelable接口。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 进阶6:两种序列化方式 Serializable 和 Parcelable

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

    1.6K50

    Android:Intent介绍 & 使用方法

    Intent的作用,详细讲解其使用方法 ---- 3....使用1:指定当前组件要完成的动作 该使用 分为显式 & 隐式意图: 3.1 显式意图 特点 明确指定需启动的组件名 即 显式Intent不需 解析Intent 则可直接启动目标组件 具体使用...使用2:不同组件间 传递数据 使用方法 在当前Activity把要传递的数据暂存在Intent中(通过PutExtra() )、在新启动的Activity中取出Intent中的数据 可传递的数据类型...Serializable对象、Parcelable及其对应数组、CharSequence 类型 d. ArrayList,泛型参数类型为:、传递代码 // 目的:将FristActivity中的一个字符串传递到SecondActivity中,并在SecondActivity中将Intent对象中的数据(FristActivity传递过来的数据

    1.3K20

    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并不是安全上限。

    1.7K30

    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

    使用 Intent 启动 Activity和Activity之间的数据传递

    接下来是借助Intent来进行Activity之间的数据传递,要借助Intent对象来进行Activity 之间的数据传递,要借助Intent类的putExtra方法: ?...,这里的数据是一个Bitmap类型的图片数据, * Bitmap 类型实现了接口Parcelable,因此它也是Parcelable类型的数据 */...bundle.putParcelable方法来储存一个Bitmap对象,在上面提过了我们可以用Serializable接口来将我们要传递的自定义数据“序列化”,那么在这里,这个Parcelable接口的功能也是一样的...,也是将一些复杂的数据序列化用于传输,两者的区别在于效率问题Parcelable接口的效率更高,但是使用起来更加复杂,要实现接口中的一系列抽象方法用于将复杂的类型序列化,而Serializable接口使用简单...(BIG_DATA, bigData); startActivity(intent); } 可以看到,我们在这个方法里面新建了大小为1Mb的数组用于Intent 的传输,运行程序:

    2.3K10

    Android点将台:外交官

    [Bundle类]的及其在intent的数据传递 [4].Android源码中[intent-filter]的解析流程 2.Intent总览 类名:Intent 父类:Object...1.永久的保存对象数据(保存在文件当中,或者是磁盘中),需要时反序列化生成对象 2.将对象数据转换成字节流进行网络传输 3.使用Intent时传递序列化对象 1.对象的序列化Serializable /...只能在Android中使用 P以Ibinder作为信息载体的,在内存上的开销比较小,P在性能方面要强于S S在序列化操作的时候会产生大量的临时变量,(反射机制)从而导致GC的频繁调用 |---Parcelable...的性能要强于Serializable 在读写数据的时候,Parcelable是在内存中直接进行读写 而Serializable是通过使用IO流的形式将数据读写入在硬盘上 Parcelable无法将数据进行持久化...(磁盘存储),Serializable可以 (在不同的Android版本当中,Parcelable可能会不) 五、Intent的数据传递 Intent 除来一大堆对属性的set之外,还有一大堆的putExtra

    19810

    2014-10-25Android学习--------activity之间批量传递数据----Bundle类的实现

    这就相当于activity之间的数据的通信吧,信息的传递 方法是:使用Bundle类 根据前面的学习中可以看到,从ListView界面中,当我们点击每一行的item的时候,页面就应该要跳转到另外一个界面中去...,并且我们看到的图片恰好是上面传递过来的,值也应该是根据上面用户选择的item动态设置的,这就导致了activity之间的数据传递。...Bundle的: 它是一个map,这个map的定义是:从一个字符串String映射不同Parcelable类型。...其他的我们先不管,我们可以知道的就是这个对象是一个map,里面的键值都是String类型 这跟前面我们创建的List> lists数组的元素是一致的就可以了。..., 总结: 1.A是怎么传递数据过来的: 首先定义一个意图,Intent intent = new Intent(); 其次 设置传递的数据:利用intent.putExtra(Key,Value

    64420
    领券