如何在多个Activity中共享数据?Android中有Application变量吗?听起来象是在说Asp(Asp也有所谓的Application变量)。
如果你想在多个Activity之间共享一组电话号码,你可以用xml资源文件,也可以用SharedPreferences。
但Application变量其实不仅仅是变量,他其实是对象,也就是说可以在应用程序的多个Activity间共用代码(方法)。
例如,我有一个获取本机号码的方法,想让所有的类中都能方便地调用它。你也许会说,创建一个工具类好了。没错,我准备把它封装在单独的类里。
但仅仅这样还不够。因为普通的类你怎么获得一个Context?Android
SDK中有大量方便的方法,都需要Context来调用,比如
getSystemService
方法(这个例子里面就要用到),又比如
getSharedPreferences
方法,经常用来获取应用程序共享数据,又比如
getString
方法,我们用来读取xml资源中定义的字符串,等等。
我们平时使用 Context的时候很方便,那是因为Activity已经为我们准备好了。
而作为工具类,通常不需要界面,因此它不可能继承自Activity。
你又会说,我们可以通过方法参数传递一个Context进去。就目前为止,我们所知道的Context只有Activity和它的子类。但调用我们的工具类的很可能根本不是一个Activity子类,它又怎么获得一个Context来传递给参数呢?同样问题又出现了,我们依然没有解决它。
那么我们就束手待毙了吗?
我们没有其他更多的选择,只能使用Application变量。
1、AndroidManifest.xml
又是AndroidManifest.xml。这东东可以说是太重要了,我们随时都需要用到它。
首先,在<application>标签中申明属性:
android:name
=
"ydtf.pm.Utils"
我们定义了一个Application变量ydtf.pm.Utils。说是变量,其实更象是一个类名。没错,它就是我们接下来要实现的工具类。
说它是变量,是因为这样声明了之后Utils类会获得一个本应用程序的Context引用。
这有点象Spring IoC(依赖注入)?或者是AOP(象AOP一样给Utils对象增加一个属性)?
我不知道怎么形容它,反正你看接下来的代码就知道了。
2、Utils.java
public
class
Utils
extends
Application {
private
static
Utils
instance
;
private
SharedPreferences
settings
;
private
Context
ctx
;
public
static
Utils
getInstance(){
return
instance
;
}
@Override
public
void
onCreate() {
//
TODO
Auto-generated method stub
super
.onCreate();
instance
=
this
;
ctx
=
this
.getBaseContext();
}
//
获取
sim
卡手机号
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
public
String
getLocalTelNo(){
//
取得手机服务
TelephonyManager tm = (TelephonyManager)
ctx
.getSystemService(Context.
TELEPHONY_SERVICE
);
return
tm.getLine1Number();
}
}
代码很简单的,只需要注意那么几点。
1、继承Application
既然是Application变量,当然要继承自Application,因为<application>标签规定
android:name
属性中的东西必须是Application子类。此外,Application象Activity一样,提供了获得“免费”Context的方法getBaseContext()。
2、覆盖onCreate()方法
onCreate()方法实际上是Application的初始化方法,当构造方法被调用之后接着被调用。因此我们需要在这里获得必要的东西,比如Context。于是:
ctx
=
this
.getBaseContext();
3、使用Context
这样在接下来的实例方法中,我们就有“免费”的Context使用了,就如getLocalTelNo所做的:
ctx
.getSystemService(Context.
TELEPHONY_SERVICE
);
4、在其他的类中使用Utils:
跟一般的类一样使用它:
String number=Utils.getInstance().getLocalTelNo();
分享到:
相关推荐
使用Application做全局变量
学习资料学习资料学习资料学习资料学习资料学习资料
Android用Application设置全局变量以及使用 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅...
Android中用Application类实现全局变量
Android-Application被回收引发空指针异常分析(消灭全局变量)-例子 http://blog.csdn.net/zivensonice/article/details/51451486
Application设置全局变量以及传值 /** * 重写Application,主要重写里面的onCreate方法,就是创建的时候, * 我们让它初始化一些值,前段时间在javaeye里面看到过一个例子,与此相似, * 我做了些改进。听说外国...
Application 生命周期&全局变量
asp.net聊天室,用application全局变量实现功能,参考别人,结合自己的,最终的效果,挺不错的
在ASP.NET中传值的方式有许多种,典型的就是使用Application变量、Session变量,以及Querying,Cookies,Forms进行传值。简单介绍了这几种方法及其优劣,讨论了在ASP.NET环境中的实际运用。
SPIiiPlus MMI 软件用户指导
springboot引用静态资源static中变量常用方法,经常用到的是非静态变量,在需求类方法中引入比较容易配置,当遇到静态变量时常出现错误,本文档为手动操作样例与结构展示
Application.ProcessMessages; end; end; // we must use the result Total := n2; time2 := Now; Label1.Caption := FormatDateTime ( 'n:ss', Time2-Time1) + ' seconds'; end; 记时这段代码值得一看,...
本文实例讲述了Android编程之Application设置全局变量及传值用法。分享给大家供大家参考,具体如下: /** * 重写Application,主要重写里面的onCreate方法,就是创建的时候, * 我们让它初始化一些值,前段时间在...
这种属性应用方式是 field_name=@field_value@。 两个@符号是springboot为...补充知识:springboot项目使用@Value注解获取配置文件中的配置信息 application.yml配置文件得配置信息 web: my_name: mqs tags: aaa,bbb
使用Application对象保存信息 (1)、使用Application对象保存信息 Application(“键名”) = 值 或 Application(“键名”,值) (2)、获取Application对象信息 变量名 = Application(“键名”) 或:变量名 = ...
就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何地方都可以使用和访问 除非是Web服务器停止 Android...
使用系统变量. . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 PLC_R 和 PLC_W 结构 . . . . . . . . . . . . . . . . . . . . . 14 PLC_R:控制器只读系统变量. . . . . . . . . . . . . . . . . . . ...
JDK环境变量配置: 1,新建变量名:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.7.0 2,打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 3,新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\...