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

首页 / 常见问题 / 企业数字化转型 / Android 程序中如何实现 Activity 之间的数据传递
作者:数据管理平台 发布时间:昨天10:50 浏览量:3273
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小时内删除。

最近更新

结合人工智能、大数据、无人机、物联网的环保企业有哪些
02-07 10:50
数据库这门课为什么这么难学,该怎么学
02-07 10:50
经营数据看板如何分体设计
02-07 10:50
为什么大数据是一个趋势
02-07 10:50
数据治理到底是什么 为什么企业需要做数据治理
02-07 10:50
物联网将为汽车行业的大数据应用带来哪些影响
02-07 10:50
如何开通数据流量看板功能
02-07 10:50
如何关掉数据看板功能设置
02-07 10:50
透视动态看板中如何引用数据
02-07 10:50

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

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

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流