Android 程序中如何实现 Activity 之间的数据传递

首页/常见问题/企业数字化转型/Android 程序中如何实现 Activity 之间的数据传递
作者:数据管理平台发布时间:2025-02-07 10:50浏览量:4061
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

一、直接使用 Intent 传递

Android 应用中实现 Activity 之间的数据传递主要依赖于 Intent 对象,该对象不仅能够启动目标 Activity,还能够携带简单数据类型(如String、int等)或者可序列化(Serializable)/平行化(Parcelable)对象进行数据传输。Intent 传递数据简单且高效,是最常用的数据传递方式之一。

要使用 Intent 传递数据,首先在源 Activity 中创建 Intent 对象,使用 putExtra 方法添加需要传递的数据,然后启动目标 Activity。在目标 Activity 中,可以通过 getIntent 方法获取到传递的数据。例如:

源 Activity:

Intent intent = new Intent(SourceActivity.this, TargetActivity.class);

intent.putExtra("key", "value");

startActivity(intent);

目标 Activity:

Intent intent = getIntent();

String value = intent.getStringExtra("key");

此外,Intent 也支持启动 Service 或者发送 Broadcast,并携带数据。

二、使用 Bundle 传递复杂数据类型

在需要传递更为复杂的数据时,可以使用 Bundle 对象。Bundle 类似于一个存储键值对的容器,能够在不同的 Activity 之间传递多种数据类型。

将数据添加到 Bundle 中,然后通过 Intent 传递该 Bundle:

源 Activity:

Bundle bundle = new Bundle();

bundle.putString("key", "value");

Intent intent = new Intent(SourceActivity.this, TargetActivity.class);

intent.putExtras(bundle);

startActivity(intent);

目标 Activity:

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

if(bundle != null){

String value = bundle.getString("key");

}

三、使用 startActivityForResult 进行交互

当一个 Activity 需要从另一个 Activity 获取返回结果时,可以使用 startActivityForResult 方法。在目标 Activity 完成操作后,可以设置结果并返回到源 Activity。

源 Activity 启动目标 Activity:

Intent intent = new Intent(SourceActivity.this, TargetActivity.class);

startActivityForResult(intent, REQUEST_CODE);

在目标 Activity 中设置返回数据:

Intent returnIntent = new Intent();

returnIntent.putExtra("result_key", "result_value");

setResult(Activity.RESULT_OK, returnIntent);

finish();

源 Activity 通过重写 onActivityResult 方法来接收结果:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){

String result = data.getStringExtra("result_key");

// 处理返回的结果

}

}

四、通过 Singleton 类或静态变量传递

可以使用应用级的 Singleton 类或静态变量在多个 Activity 之间共享数据。这种方式要慎用,因为太多的全局变量或单例可能会导致内存泄露的风险。

在 Singleton 类中保存数据,例如:

public class DataHolder {

private static final DataHolder instance = new DataHolder();

private String data;

public static DataHolder getInstance() {

return instance;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

}

源 Activity:

DataHolder.getInstance().setData("Some Data");

目标 Activity:

String data = DataHolder.getInstance().getData();

五、使用 Content Provider 或 Shared Preferences

如果需要在多个应用间或者 Activity 间持久化地共享数据,可以使用 Content Provider 或者 Shared Preferences。

Content Provider 提供了一种在不同应用间共享数据的标准接口。通过 Content Provider,一个应用能够对外共享其数据给另外的应用访问和修改。

// 插入或查询数据使用对应的 ContentResolver 方法

getContentResolver().query();

getContentResolver().insert();

Shared Preferences 提供了一种轻量级的存储方式,适用于保存简单的数据格式,如键值对。

保存数据到 Shared Preferences:

SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putString("key", "value");

editor.commit();

从 Shared Preferences 获取数据:

SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

String value = sharedPreferences.getString("key", "default_value");

六、使用数据库 SQLite

当需要存储结构化数据时,可以使用 SQLite 数据库。在 Android 中,SQLite 是一种轻量级的数据库系统,它允许我们在本地设备上存储和管理数据。

创建数据库和表,然后进行数据的增删改查。例如,可以在源 Activity 中插入数据,在目标 Activity 中查询数据。SQLite 通过 SQLiteOpenHelper 类和 SQLiteDatabase 类提供管理和操作数据库的各种方法。

七、使用全局 Application 类

继承 Application 类并在其中加入全局数据存储的逻辑。这个自定义的应用类会在所有的 Activity 之前被创建,因此在它里面存储的数据可以在所有的 Activity 中被访问。

自定义 Application 类:

public class MyApp extends Application {

private String globalData;

public String getGlobalData() {

return globalData;

}

public void setGlobalData(String globalData) {

this.globalData = globalData;

}

}

在源 Activity 中:

((MyApp) getApplication()).setGlobalData("Shared Data");

在目标 Activity 中:

String data = ((MyApp) getApplication()).getGlobalData();

实现 Activity 之间的数据传递有很多种方式,选择最适合的方式取决于应用的需求和数据类型的复杂程度。开发者需要根据具体情况做出选择,以确保数据传递高效且安全。

相关问答FAQs:

1. 在 Android 程序中,如何在 Activity 之间传递数据?

Android 提供了多种方式来实现 Activity 之间的数据传递。一种常用的方式是使用 Intent 对象来传递数据。你可以通过在发送 Intent 时,调用 putExtra() 方法来将数据存储在 Intent 对象中,然后在接收 Intent 时,使用对应的 getExtra() 方法来获取数据。另外,你还可以使用 Bundle 对象来传递复杂的数据类型,例如数组或对象。

2. 如何在两个 Fragment 之间传递数据?

在两个 Fragment 之间传递数据也可以使用 Intent 或者 Bundle 对象。你可以在一个 Fragment 的代码中,通过获取 Activity 的引用来创建一个 Intent 对象,并使用 putExtra() 方法来存储需要传递的数据。然后,在另一个 Fragment 中,使用 getActivity() 方法获取所关联的 Activity,在该 Activity 中获取 Intent 的数据。

另外,如果两个 Fragment 在同一个 Activity 中,你还可以使用共享 ViewModel 来实现数据共享。通过创建一个 ViewModel,然后在两个 Fragment 中获取该 ViewModel 的引用,就可以共享数据了。

3. 在 Android 程序中,如何在 Activity 之间传递对象?

在 Activity 之间传递对象时,一种常用的方法是使对象实现 Parcelable 接口。Parcelable 接口使得对象能够在进程间传输,并且比 Serializable 接口更高效。你只需要在对象的类中实现 Parcelable 接口,并且实现相应的 writeToParcel()createFromParcel() 方法。

在发送 Intent 时,你可以使用 putExtra() 方法传递 Parcelable 对象,并在接收 Intent 时,使用 getParcelableExtra() 方法获取对象。

另外,如果你使用的是 Fragment 来传递对象,你可以直接在 Bundle 对象中存储对象。在发送 Fragment 之间的数据时,使用 setArguments() 方法将 Bundle 对象传递给 Fragment,然后在接收 Fragment 中通过 getArguments() 方法获取 Bundle 对象,再从中获取对象。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台:织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

河南洛阳案件管理中心是否能成为司法公正的数字化解决方案?
12-19 14:42
玖君案件管理是否能帮助企业实现高效案件管理与数字化转型?
12-19 14:42
案件管理室工作创新:提升效率的数字化转型方案
12-19 14:42
监察法案件管理:如何通过数字化提升效率与透明度?
12-19 14:42
化工产品管理网站为何成为企业数字化转型的必备之选?
12-19 14:42
寸头管理案件的新进展:如何助力企业高效管理与数字化升级
12-19 14:42
法院案件归档管理:高效司法的数字化解决方案
12-19 14:42
中移产品管理:助力企业数字化转型的高效工具
12-19 14:42
如何实现执法大队案件管理的高效与透明?探索数字化升级之路
12-19 14:42
为什么选择织信?
织信AI低代码开发底座,赋能企业快速构建复杂业务系统,驱动业务与IT高效创新
AI驱动开发
通过自然语言交互完成数据建模与逻辑编排,非技术人员也能快速上手,开发周期从数月压缩至数周。
高性能数据支持
提供上亿级数据承载能力与分布式集群部署,支持海量业务数据的高并发处理。
企业级场景覆盖
支持ERP、MES、CRM、SRM、WMS等核心系统搭建,无缝集成钉钉、企微、飞书及各类异构系统。
专业服务保障
支持私有化部署模式,全面保障数据安全。已累计服务制造、军工、金融等50000+企业客户。
B2C跨境电商知名品牌——朗驰实业
集设计、生产、销售于一体的综合性服装企业,专注女性快时尚B2C跨境电商,目前设有供应链中心、仓储中心、亚马逊运营中心、信息化中心、产品研发中心等20余个部门,引入织信低代码平台个性化定制一套研发、生产、销售全链路的数字化系统,打通服装从设计、生产到销售的各个环节。
全球500强车企巨头——吉利集团
作为一家全球知名的超大型企业,吉利需要大量的技术人员来满足各事业部门的日常数字化需求。在内部强调“降本增效”的大环境下,吉利通过采购“织信低代码平台”,开发周期平均缩短61%,人力投入减少47%,解决了开发需求常年堆积的难题。
医院后勤服务领军者——某管家
国内市场化运作、跨区域经营、集团化管理的大型专业医疗机构后勤服务供应商,全国80多座城市,每天为超过百万的病人和医护人员提供服务,通过织信低代码平台构建线上数字化的方式服务各医院的后勤保障和正常运行,主要为运送条线、保洁条线、秩序条线、工程条线、医废条线等解决工单调度、医辅材料运输、多端协同的效率难题。
中国兵器工业集团——银光化学
国家“一五”期间156个重点项目之一。属于国家高新技术企业,在信息化升级建设中,存在大量“小、散、碎”的信息化需求,需要投入大量人力资源进行开发,通过引入织信低代码平台,解决当下遇到的各类业务难题,提升整体的IT研发效率。
石油领域重点工程单位——川庆钻探
随着国企工规模的不断扩大和内部数字化转型的要求不断提升,公司着眼长远,决定借助织信低代码的各方面能力,从物资储备管理入手,并辐射经营、生产、工程、日常管理等多个板块,为后续内部信息化建设打好基座。
汽车零部件上市企业——川环科技
川环为了有效应对残酷的市场现实,高层一致决定加强公司内部管理,8大部门将全面进行数字化转型,耗时10月,成功上线8套系统,通过织信低代码平台对接现有用友U9ERP,实现各部门的业务线上化,并通过数据治理,实现整个企业从战略到经营管理的分析。
B2C跨境电商知名品牌——朗驰实业
集设计、生产、销售于一体的综合性服装企业,专注女性快时尚B2C跨境电商,目前设有供应链中心、仓储中心、亚马逊运营中心、信息化中心、产品研发中心等20余个部门,引入织信低代码平台个性化定制一套研发、生产、销售全链路的数字化系统,打通服装从设计、生产到销售的各个环节。
全球500强车企巨头——吉利集团
作为一家全球知名的超大型企业,吉利需要大量的技术人员来满足各事业部门的日常数字化需求。在内部强调“降本增效”的大环境下,吉利通过采购“织信低代码平台”,开发周期平均缩短61%,人力投入减少47%,解决了开发需求常年堆积的难题。

各行业用户的共同选择

国防军工
国防军工
央国企
央国企
生产制造
生产制造
生物医疗
生物医疗
科技服务
科技服务
金融证券
金融证券
科研院所
科研院所
物业地产
物业地产
织信适合谁?
如您有以下几种需求,欢迎 填写表单 联系我们
企业员工
《找工具开发功能》
公司老板
《找人定制系统》
软件集成商
《想快速交付项目》
  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科发路8号金融基地1栋5F5
  • 手机:137-1379-6908
  • 电话:0755-86660062
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2026. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
客服咨询热线1
0755-86660062
客服咨询热线2
137-1379-6908
申请预约演示
立即与行业专家交流