Android之在不同的Activity之间传递数据

本文介绍了Android应用中四种常用的数据传递方式:通过Intent、静态变量、剪切板和全局变量进行数据传递。每种方法都有其适用场景和限制条件。

在Android中传递数据的方法非常多,本节将介绍4种比较常用的数据传递方法,这4种数据传递方法如下:

1、通过Intent传递数据

2、通过静态(static)变量传递数据

3、通过剪切板(Clipboard)传递数据

4、通过全局变量传递数据


1、利用Intent的Extra部分来存储我们想要传递的数据,可以传送int, long, char等一些基础类型,对复杂的对象就无能为力了。Intent传递数据具有局限性,Intent无法传递不能序列化的对象。

传递数据:

//传递参数

Intent intentSimple = new Intent();

intentSimple.setClass(MainActivity.this,SecondActivity.class);

Bundle bundle=new Bundle();

bundle.putString("user","xxx");

bundle.putString("pwd","xxx");

intentSimple.putExtras(bundle);

startActivity(intentSimple);

接收数据:

//接收参数  
Bundle bundle = this.getIntent().getExtras();  

String eml = bundle.getString("usr");  

String pwd = bundle.getString("pwd");

2、静态变量就是一种非常方便,易用的传递数据的方法。(static)

3、使用剪切板传递数据。(Clipboard)

下面是将字符串保存到剪切板上的代码:

Intent intent=new Intent(this,SecondActivity.class);

//获取管理剪切板的对象(ClipboardManager)

ClipboardManager clipboard=(ClipboardManager)gerSystemService(Context.CLIPBOARD_SERVICE);

//向剪切板保存字符串

clipboard.setText("通过Clipboard传递数据");

startActivity(intent);

下面是从剪切板上获取这个字符串的代码:

ClipboardManager clipboard=(ClipboardManager)gerSystemService(Context.CLIPBOARD_SERVICE);

//剪切板获得字符串

String text=clipboard.getText().toString();

4、使用全局变量传递数据(Application类)

虽然使用静态变量可以传递任何类型的数据,但是官方并不推荐这么做,因为大量使用静态变量,容易造成内存溢出异常。

  1. public class Data extends Application{  
  2.     private String b;  
  3.       
  4.     public String getB(){  
  5.         return this.b;  
  6.     }  
  7.     public void setB(String c){  
  8.         this.b= c;  
  9.     }  
  10.     @Override  
  11.     public void onCreate(){  
  12.         b = "hello";  
  13.         super.onCreate();  
  14.     }  
  15. }  



不同 Activity 之间传递数据常用的类有 `Intent` 和通过扩展 `Application` 组件类。 ### Intent `Intent` 适用于数据量少的简单值传递。以下是基本使用示例: ```java // 在发送数据的 Activity 中 Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); intent.putExtra("key", "value"); startActivity(intent); // 在接收数据的 Activity 中 Intent receivedIntent = getIntent(); String data = receivedIntent.getStringExtra("key"); ``` 这种方式在 Activity 之间进行值传递时较为常用 [^1]。 ### 扩展 Application 组件类 通过扩展 `Application` 类可以实现全局数据的共享,从而在不同 Activity 之间传递数据。示例如下: ```java // 自定义 Application 类 import android.app.Application; public class MyApplication extends Application { private String data; @Override public void onCreate() { super.onCreate(); data = null; } public String getData() { return data; } public void setData(String data) { this.data = data; } } ``` 同时,需要在 `AndroidManifest.xml` 文件中添加如下代码以初始化 `MyApplication`: ```xml <application android:name=".MyApplication" ... > ... </application> ``` 在 Activity 中使用: ```java // 设置数据 MyApplication myApp = (MyApplication) getApplication(); myApp.setData("shared data"); // 获取数据 MyApplication myApp = (MyApplication) getApplication(); String sharedData = myApp.getData(); ``` 这种方式可以实现该项目的所有 Activity 共享数据 [^3][^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值