Android Studio:如何利用Application操作全局变量

目录

一、全局变量是什么 

二、如何把输入的信息存储到全局变量

2.1 MainApplication类

 2.2 XML文件

 三、全局变量读取

四、修改manifest

​编辑 

五、效果展示


 

一、全局变量是什么 

        全局变量是指在程序的整个生命周期内都可访问的变量,它的作用范围不限于某个函数、方法或类,而是可以被多个代码模块共享。

        学习过java的可能会对此有些陌生,java中并没有全局变量的概念,但是在学习servlet的时候,必然接触过请求域和应用域,所谓的应用域对象servletContext,也就是servlet上下文对象,在这个对象中绑定的数据可以被所有用户所共享。比如setAttribute方法可以向域中绑定数据,getAttribute和removeAttribute分别可以从域中获取、移除数据。

        类比来看,Application Scope(应用域) 很像 Java 的全局变量,因为它在整个应用程序的生命周期内都是可用的,适用于存储全局数据。

        另外可以用单例模式来存储“全局变量”:

public class GlobalManager {private static GlobalManager instance = new GlobalManager();private String data;private GlobalManager() {}  // 私有构造方法,防止外部实例化public static GlobalManager getInstance() {return instance;}public String getData() {return data;}public void setData(String data) {this.data = data;}
}//设置全局变量
GlobalManager.getInstance().setData("Hello");

这样读取的时候,就会有固定的输出内容:

System.out.println(GlobalManager.getInstance().getData()); // 输出: Hello

在AS中Application的生命周期覆盖了全过程,不像Activity活动页面,一旦页面关闭生命周期就进入destroy,利用全生命特性,可以用来存储全局变量。

二、如何把输入的信息存储到全局变量

先看第一段代码,其作用就是把用户的注册信息保存到全局变量hashmap中。

public class AppWriteActivity extends AppCompatActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {private EditText et_name; // 声明一个编辑框对象private EditText et_age; // 声明一个编辑框对象private EditText et_height; // 声明一个编辑框对象private EditText et_weight; // 声明一个编辑框对象private boolean isMarried = false;private String[] typeArray = {"未婚", "已婚"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_app_write);et_name = findViewById(R.id.et_name);et_age = findViewById(R.id.et_age);et_height = findViewById(R.id.et_height);et_weight = findViewById(R.id.et_weight);CheckBox ck_married = findViewById(R.id.ck_married);ck_married.setOnCheckedChangeListener(this);findViewById(R.id.btn_save).setOnClickListener(this);findViewById(R.id.btn_intent).setOnClickListener(this);}@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {isMarried = isChecked;}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_save) {String name = et_name.getText().toString();String age = et_age.getText().toString();String height = et_height.getText().toString();String weight = et_weight.getText().toString();if (TextUtils.isEmpty(name)) {ToastUtil.show(this, "请先填写姓名");return;} else if (TextUtils.isEmpty(age)) {ToastUtil.show(this, "请先填写年龄");return;} else if (TextUtils.isEmpty(height)) {ToastUtil.show(this, "请先填写身高");return;} else if (TextUtils.isEmpty(weight)) {ToastUtil.show(this, "请先填写体重");return;}// 获取当前应用的Application实例MainApplication app = MainApplication.getInstance();// 以下直接修改Application实例中保存的映射全局变量app.infoMap.put("name", name);app.infoMap.put("age", age);app.infoMap.put("height", height);app.infoMap.put("weight", weight);app.infoMap.put("married", typeArray[!isMarried ? 0 : 1]);app.infoMap.put("update_time", DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss"));ToastUtil.show(this, "数据已写入全局内存");}if (v.getId() == R.id.btn_intent){// 创建Intent对象,启动 AppReadActivityIntent intent = new Intent(AppWriteActivity.this, AppReadActivity.class);// 启动目标ActivitystartActivity(intent);}}}

2.1 MainApplication类

其中,我自定义了一个MainApplication类,具体代码如下:

这个自定义 Application 类的作用

  1. 存储全局数据

    • 定义了 infoMap 变量,用于存储一些全局信息,比如用户输入的数据。
    • 由于 Application 的生命周期与应用相同(应用启动 -> 关闭),infoMap 里的数据在应用运行期间都是有效的。
  2. 提供 getInstance() 方法,作为单例使用

    • MainApplication 使用 mApp 作为静态实例,并在 onCreate() 里初始化它,这样,任何地方都可以通过 MainApplication.getInstance() 访问 Application,不用每次都 getApplication()

public class MainApplication extends Application {private static MainApplication mApp;public HashMap<String,String> infoMap =new HashMap<String,String>();public static MainApplication getInstance(){return mApp;}@Overridepublic void onCreate() {super.onCreate();mApp = this;}
}

 

 2.2 XML文件

信息收集的页面示意图,其具体代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="40dp" ><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="姓名:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="3dp"android:layout_marginTop="3dp"android:layout_toRightOf="@+id/tv_name"android:background="@drawable/editext_selector"android:gravity="left|center"android:hint="请输入姓名"android:inputType="text"android:maxLength="12"android:textColor="@color/black"android:textSize="17sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="40dp" ><TextViewandroid:id="@+id/tv_age"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="年龄:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_age"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="3dp"android:layout_marginTop="3dp"android:layout_toRightOf="@+id/tv_age"android:background="@drawable/editext_selector"android:gravity="left|center"android:hint="请输入年龄"android:inputType="number"android:maxLength="2"android:textColor="@color/black"android:textSize="17sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="40dp" ><TextViewandroid:id="@+id/tv_height"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="身高:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_height"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="3dp"android:layout_marginTop="3dp"android:layout_toRightOf="@+id/tv_height"android:background="@drawable/editext_selector"android:gravity="left|center"android:hint="请输入身高"android:inputType="number"android:maxLength="3"android:textColor="@color/black"android:textSize="17sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="40dp" ><TextViewandroid:id="@+id/tv_weight"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="体重:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_weight"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="3dp"android:layout_marginTop="3dp"android:layout_toRightOf="@+id/tv_weight"android:background="@drawable/editext_selector"android:gravity="left|center"android:hint="请输入体重"android:inputType="numberDecimal"android:maxLength="5"android:textColor="@color/black"android:textSize="17sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="40dp" ><CheckBoxandroid:id="@+id/ck_married"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:checked="false"android:text="已婚"android:textColor="@color/black"android:textSize="17sp" /></RelativeLayout><Buttonandroid:id="@+id/btn_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="保存到全局内存"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_intent"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="跳转到读取页面"/></LinearLayout>

 三、全局变量读取

这里的代码是从全局变量infoMap中读取用户的注册信息

public class AppReadActivity extends AppCompatActivity {private TextView tv_app; // 声明一个文本视图对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_app_read);tv_app = findViewById(R.id.tv_app);readAppMemory(); // 读取全局内存中保存的变量信息}// 读取全局内存中保存的变量信息private void readAppMemory() {String desc = "全局内存中保存的信息如下:";// 获取当前应用的Application实例MainApplication app = MainApplication.getInstance();// 获取Application实例中保存的映射全局变量Map<String, String> mapParam = app.infoMap;// 遍历映射全局变量内部的键值对信息for (Map.Entry<String, String> item_map : mapParam.entrySet()) {desc = String.format("%s\n %s的取值为%s",desc, item_map.getKey(), item_map.getValue());}if (mapParam.size() <= 0) {desc = "全局内存中保存的信息为空";}tv_app.setText(desc);}}

四、修改manifest

 

五、效果展示

可以看到全局变量的信息已经被页面2所获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 可靠性探究—副本刨析

Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据&#xff1b;服务副本指多个节点提供同样的服务&#xff0c;每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…

Unity Dots学习

ISystem和SystemBase的区别 Archetype和Chunk 相同组件的实体放在一起&#xff0c;也就是我们所说的内存块&#xff08;Chunk&#xff09; Chunk有一个大小 https://blog.csdn.net/weixin_40124181/article/details/103716338 如果批量操作的entity都是同一个chunk下的效率会更…

Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)

其实出现该问题就是监听或者服务没有配好。 G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMINlistener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\d…

Mac上搭建k8s环境——Minikube

1、在mac上安装Minikube可执行程序 brew cask install minikub 安装后使用minikube version命令查看版本 2、安装docker环境 brew install --cask --appdir/Applications docker #安装docker open -a Docker #启动docker 3、安装kubectl curl -LO https://storage.g…

PostgreSQL 中进行数据导入和导出

在数据库管理中&#xff0c;数据的导入和导出是非常常见的操作。特别是在 PostgreSQL 中&#xff0c;提供了多种工具和方法来实现数据的有效管理。无论是备份数据&#xff0c;还是将数据迁移到其他数据库&#xff0c;或是进行数据分析&#xff0c;掌握数据导入和导出的技巧都是…

【Gitlab】虚拟机硬盘文件丢失,通过xx-flat.vmdk恢复方法

前言 由于近期过年回家&#xff0c;为了用电安全直接手动关闭了所有的电源&#xff0c;导致年后回来商上电开机后exsi上的虚拟机出现了问题。显示我的gitlab虚拟机异常。 恢复 开机之后虚拟机异常&#xff0c;通过磁盘浏览发现gitlab服务器下面的虚拟机磁盘文件只有一个xxx-f…

python的ruff简单使用

Ruff 是一个用 Rust 编写的高性能 Python 静态分析工具和代码格式化工具。它旨在提供快速的代码检查和格式化功能&#xff0c;同时支持丰富的配置选项和与现有工具的兼容性。ruff是用rust实现的python Linter&Formatter。 安装&#xff1a; conda install -c conda-forge…

第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)

简单来说&#xff0c; Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类&#xff0c;旅客(线程)分别手持登机牌和身份证接受工作人员的检查&#xff0c;示例代码如所示。…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…

简述mysql 主从复制原理及其工作过程,配置一主两从并验证。

MySQL 主从复制工作过程 1、二进制日志记录&#xff08;Binary Logging&#xff09;&#xff1a; 主服务器开启二进制日志记录功能&#xff0c;将所有更改数据的操作&#xff08;如 INSERT、UPDATE、DELETE&#xff09;记录到二进制日志文件中。 2、日志传输&#xff08;Log…

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构&#xff0c;类似于一个二维的表格或数据库中的数据表。它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由…

Windows Docker笔记-安装docker

安装环境 操作系统&#xff1a;Windows 11 家庭中文版 docker版本&#xff1a;Docker Desktop version: 4.36.0 (175267) 注意&#xff1a; Docker Desktop 支持以下Windows操作系统&#xff1a; 支持的版本&#xff1a;Windows 10&#xff08;家庭版、专业版、企业版、教育…

Android学习20 -- 手搓App2(Gradle)

1 前言 昨天写了一个完全手搓的&#xff1a;Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt&#xff0c;d8这些来搞。其实不想弄Gradle的&#xff0c;不过想着既然开始了&#xff0c;就多看一些。之前写过一篇Gradle&#xff0c;不过是最简单的编译&#xff0c;不涉…

团建 蓝桥杯省a 15

问题描述 小蓝正在和朋友们团建&#xff0c;有一个游戏项目需要两人合作&#xff0c;两个人分别拿到一棵大小为 nn 和 mm 的树&#xff0c;树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点&#xff0c;从根到这个叶结点的路径上经过的所…

vscode 如何通过Continue引入AI 助手deepseek

第一步&#xff1a; 在deepseek 官网上注册账号&#xff0c;得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步&#xff1a; 打开vscode,在插件市场安装Continue插件, 点击设置&#xff0c;添加deepseek模型&#xff0c;默认…

计算机网络——三种交换技术

目录 电路交换——用于电话网络 电路交换的优点&#xff1a; 电路交换的缺点&#xff1a; 报文交换——用于电报网络 报文交换的优点&#xff1a; 报文交换的缺点&#xff1a; 分组交换——用于现代计算机网络 分组交换的优点&#xff1a; 分组交换的缺点 电路交换——…

PostgreSQL函数自动Commit/Rollback所带来的问题

一、综述 今天在PostgreSQL遇到一个奇怪的现象&#xff0c;简而言之&#xff0c;是想用函数&#xff08;存储过程&#xff09;实现插入记录&#xff0c;整个过程没报错但事后却没找到记录&#xff01;忙活半天&#xff0c;才发现原因是PostgreSQL函数&#xff08;存储过程&…

linux 进程补充

环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪 里&#xff0c;但是照样可以链接成功&#…

Spring Boot常用注解深度解析:从入门到精通

今天&#xff0c;这篇文章带你将深入理解Spring Boot中30常用注解&#xff0c;通过代码示例和关系图&#xff0c;帮助你彻底掌握Spring核心注解的使用场景和内在联系。 一、启动类与核心注解 1.1 SpringBootApplication 组合注解&#xff1a; SpringBootApplication Confi…

前部分知识复习05

一、多级渐远贴图MipMap 选择贴图&#xff0c;可以勾选贴图的多级渐远效果 [IntRange]_MipMap("MipMap",Range(0,12))0 //多级渐远贴图的LOD调节滑杆 _MipMapTexture("MipMapTexture",2D)"white"{} //定义多级渐远贴图 多级渐远贴图的采样…