[Android基础]Android中如何使用Intent传递对象

Kaggle -- Shelter Animal Outcomes 最近在Kaggle上做了一个数据挖掘的比赛,是一个分类的问题,收获良多。故此将比赛的过程记录了下来。竞赛地址Kaggle–Shelter Animal Outcomes题目大意  在美国,每年大约有760万伴侣动物被动物收容所收容。大多数动物是被它们的主人主动放弃,而另一些则是由于种种的意外情况而进入收容所。最终,有些动物足够幸运找到了新的归宿,但另一些不那么幸运的则最终被安乐死。美国每年大约有27 阅读详情

我们可以借助Intent来启动活动、发送广播、启动服务等,在进行上述操作时,我们还能在Intent中添加一些附加数据,已达传值的效果,比如下面的代码:
MainActivity

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name", "xiaoming");
intent.putExtra("age", 17);
startActivity(intent);

SecondActivity可以得到这些值:

getIntent().getStringExtra("name");
getIntent().getIntExtra("age", 0);

这里只是利用Intent传递一些值,如何传递对象呢?

有两种方式,一种是Serializable方式,另一种是Parcelable方式。

Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化方法很简单,只需要让一个类去实现Serializable这个接口就可以了。
比如一个Animal类,其中包含了type,sex这两个字段,代码如下:

public class Animal implements Serializable
{
    private String type;
    private String sex;
    public String getType()
    {
        return type;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public Stirng getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
}

MainActivty.java

Animal animal = new Animal();
animal.setType("panda");
animal.setSex("male");
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent,putExtra("animal_panda", animal);
startActivity(intent);

SecondActivity.java

Animal animal = (Animal)getIntent().getSerializableExtra(animal_panda);

这里调用了getSerializableExtra()方法获取通过参数传递过来的序列化对象,接着再将它向下转型成Person对下岗,这样我们就成功实现了使用Intent来传递对象的功能了。

除了Serializable之外,使用Parcelable也可以实现相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样就实现传递对象的功能了。

public class Animal implements Serializable
{
    private String type;
    private String sex;
    public String getType()
    {
        return type;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public Stirng getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
    @Override
    public int describeContents()
    {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeString(type);
        dest.writeString(sex);
    }
    public static final Parcelable.Creator<Animal> CREATOR = new Parcelable.Creator<Animal>()
    {
        @Override
        public Animal createFromParcel(Parcel source)
        {
            Animal animal = new Animal();
            animal.type = source.readStirng();
            animal.sex = source.readString();
            return animal;
        }
        @Override 
        public Aniaml[] newArray(int size)
        {
            return new Animal[size];
        }
    }
}

SecondActivity.java

Animal animal = (Animal)getIntent.getParcelableExtra(animal-panda);

存在即理由,Parcelable方式虽然复杂,但效率更高,一般推荐使用Parcelable方式来实现Intent传递的功能。

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议 本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。 阅读详情

相关推荐

IEEE Access投稿全流程:从LaTeX模板到Overleaf实战(附避坑指南)

本文详细解析了向IEEE Access期刊投稿的完整流程,重点介绍了如何使用LaTeX模板在Overleaf平台上高效撰写和格式化论文。内容涵盖模板选择、作者信息填写、公式图表排版、参考文献管理(BibTeX)以及投稿前的最终检查清单,旨在帮助研究者,尤其是LaTeX新手,规避常见技术问题,顺利完成符合期刊严格要求的稿件提交。

open4的博客 576

Second season eighteenth episode,the role Joey played died...

[Scene: Monica and Rachel's apartment. Everyone except Ross is there watching _ Days of Our Lives _.] _AMBER: Oh Drake. DR. REMORE: I'm sorry Amber. It's just like Brad to have to have the last word._ [Ross enters] ROSS: I'm sorry I'm late, what happened?

xiyangxia666hui的博客 5352

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2664

使用SQLHelper

<br /><br />首先:<br />using xsystem.DB;<br /><br /><br />函数使用<br /> public int AnimalAdd(string AnimalName, string AnimalSex)<br />    {<br />        int rowsAffected;<br />        SqlParameter[] parameters = {<br />new SqlParameter("@AnimalID", SqlDbType.I

fusu123的专栏 1万+

KUKA-外部自动运行模板程序——个人设计模式&思路

用于说明KUKA与西门子PLC外部自动交互模板的设计思路与使用流程

qq_39024187的博客 5604

自抗扰(ADRC)控制原理及控制器设计

自抗扰控制原理以及控制器设计

weixin_43487974的博客 3万+

英语学习之animal

animal1动物(野兽,wild animal;家畜,farm animal/domestic animal)We should protect animals.2兽性的人,衣冠禽兽Drinking alcohol releases the animal in man.喝酒使人兽性大发release 释放;release a new product 推出新产品 酗酒的人:alcoholic工作狂

爪哇壹游 2277

配电变压器测控终端装置设计

配电变压器测控终端装置在电网运行中承担着数据采集、状态监测、故障预警及远程控制的关键任务,其性能直接关系到配电系统的安全性与可靠性。本研究围绕测控终端的硬件电路、软件算法、通信系统及系统优化展开深入分析,并基于实验测试验证系统性能。硬件设计包括模拟量输入电路、电压电流信号变换电路、A/D转换电路、控制与通信电路及系统电源电路,确保信号采集的高精度与系统的稳定性。软件部分涵盖系统控制程序、数据采集与处理程序、通信程序及显示与控制程序,实现数据的实时处理与传输。通信模块结合RS-485、CAN总线及以太网技术,

weixin_44553616的博客 1102

定义一个Animal 类,定义性别属性sex(字符串类型),定义年龄属性。(C++)

定义一个Animal 类,定义性别属性sex(字符串类型),定义年龄属性。定义获取和设置性别、年龄的方法。定义一个 Dog 类,继承 Animal 类,定义小狗的名字属性,定义睡觉的方法,实现输出:一只名为xx性别为xx的小狗,现在xx岁,它正在睡觉。 ......

m0_65420451的博客 6629

天龙八部源码深度解析:从宠物系统到副本机制(C++游戏开发实战)

本文深度解析《天龙八部》源码架构,重点剖析宠物系统状态机实现与副本动态加载机制等核心模块。通过C++代码示例展示宠物AI状态迁移逻辑和副本场景管理技术,为现代游戏开发提供兼容性改造方案与设计启示。适合游戏开发者学习经典MMORPG的工程化实现路径。

weixin_29011239的博客 386

[密码学实战]密评考试训练系统v1.0程序及密评参考题库(获取路径在文末)(二十四)

本系统将密码学理论与软件工程实践相结合,为密评备考提供了高效解决方案。随着《密码法》的深入实施,掌握密评知识将成为信息安全从业者的核心竞争力。立即开始您的密码安全专家之旅!(注:实际应用请以最新发布版本为准)

曼岛_的博客 797

Android使用Intent传递对象

Android使用Intent传递对象

Android应用开发工程师 1632

你学Simulink--基于储能系统的建模与仿真场景:飞轮储能系统在电网调频中的作用仿真

本文详细介绍了利用Simulink+Simscape搭建飞轮储能系统(FESS)电网调频仿真模型的全过程。主要内容包括:系统工作原理及调频作用分析,基于Simulink的模块化建模步骤(飞轮、电机/发电机、功率电子接口等组件搭建),调频控制策略实现(频率检测、功率指令生成和模式切换),以及仿真参数设置与结果分析方法。该模型可有效模拟FESS在电网频率调节中的快速响应特性,为新能源存储和智能电网研究提供重要仿真工具,同时可通过参数优化和算法改进进一步提升系统性能。

xiaoheshang_123的博客 168

android 使用intent传递对象,Android--Intent传递对象

Intent 传递对象通常有两种实现方式,Serializable 和 Parcelable;一、Serializable:序列化,表示将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上进行传输,也可以存储到本地。这里实现了 Serializable 接口的类就可以通过 Intent 传递了;--发起方传递对象:调用 Intent 的 putExtra() 即可;Person per...

weixin_39932838的博客 4414

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android 使用Intent传递对象用法详解

bundle.putParcelable("user", user) // user 为 Parcelable 对象。是启动 Activity、Service 等组件的关键工具,同时也是在组件间传递数据的重要桥梁。适合需要封装多个参数或复用 Bundle 的场景。数据类、列表对象、频繁传递的数据结构。需要额外序列化/反序列化,性能略低。高性能、Android 原生支持。性能差,不适合大对象或频繁传递。在 Android 开发中,灵活,适合传输复杂结构。

XHRK1的博客 967

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android 使用Intent传递对象

Intent的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。 在进行操作的时候,我们还可以在Intent中添加一些附加数据,以达到传值的效果。 例如:在FirstActivity中添加如下代码: Intent intent=new Intent(this,MainActivity.class); intent.putExtra("String_data...

qq_33369509的博客 1152

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

安卓开发:使用Intent传递对象

Intent的用法相信大家已经比较熟悉了,我们可以借助它来启动活动,发送广播,启动服务等。调用Intent的putExtra()方法来添加要传递的数据,之后在其他Activity类中就可以获取到这些值了。但是你有没有发现,putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都支持,但是当你想传递一些自定义对象的时候就需要一些技巧了。使用Intent来传递对象通常有两种实现方式

你的同学仔鸡肠 720

在Android中通过Intent使用Bundle传递对象

Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。 两种序列化方式的区别: 1.在使

梁剑的专栏 716

Android之使用 Intent 传递对象(一)Serializable 方式

Android之使用 Intent 传递对象(一)Serializable 方式 一,简介 使用 Intent 来传递对象通常有两种实现方式, Serializable 和 Parcelable, 本小节中我们先 来学习一下第一种的实现方式。 Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后 的对象可以在网络上进行传输,也可以存储到本地。至于序列

航天飞哥的博客 529

Android 进阶之使用Intent传递对象

Android 进阶之使用Intent传递对象 ——整理自《第一行代码》 方式一:Serializable public class Person implements Serializable{ ...

@CJZ啊的博客 8757

Android使用Intent传递对象的两种方式

Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActivity 中添加如下代码: [java] view plain copy Intent intent = new Intent(FirstActiv

翟浩浩Android专栏 485

Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

<br />      在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口。下面我们以一个完整的例子来说明。<br />1.新建一个Android的工程,其中该工程的目录结构如下图:<br /><br /> <br

Android-Idea 5万+

Android >> 51. 使用Intent 传递对象

我们知道,若只是传输一些常用的数据类型的数据,例如String、int 等。可以使用intent.putExtra() 方法。 但是当我们需要传递一些自定义对象的时候,就需要使用如下方式: 使用Intent 来传递对象通常有两种实现方式:Serializable 和Parcelable。 Serializable 方式 Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的...

原谅我这一生不羁放纵爱自由 293

【Android】使用 Intent 传递对象的两种序列化方式

简单介绍 Android 中通过Intent传递自定义对象的两种方式:Serializable和Parcelable。

LiuYaoheng的博客 873
上一篇: [设计模式学习]设计模式学习之简单工厂模式
下一篇: [J2EE基础]初识JSP和Servlet
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值