德克云技术联盟
标题:
探索新技术经验分享(五)Android中的全局变量
[打印本页]
作者:
李昭
时间:
2014-11-4 15:02
标题:
探索新技术经验分享(五)Android中的全局变量
经历前两讲之后,我们对android的开发已经有了一个大概的认识。按照打通道路后再拓宽的探索学习方式,今天我们来看看android开发中的全局变量怎么处理。
为什么要说这个问题呢?在我研究任何一个新技术的开发的过程中,我感觉在完成页面的呈现、获取数据之后,最重要的就是全局变量的处理了,因为应用软件要实现合理的功能布局,必然走向多页面,而页面的交互中必然需要用到全局变量。在这里插入一下,有人可能对我这句话有异议,可能会说“我用一个页面也能实现一个应用”,但是我的经验是页面代码的复杂度跟业务功能是成乘方关系的,也就是说,从设计角度看,当你给页面增加一个新功能时,页面代码的复杂程度会以指数关系递增。毕竟我们做应用软件,不是基础研究,这种钻牛角尖的做法会面临很大的成本风险。
回到正题。
首先,我要告诉你在做SFE之前,我也不知道android的全局变量是怎么一回事。但是我可以告诉你怎么去找它的入口。对,没错,入口。
我们知道,在c#的程序里面通过Application对象就可以获取到全局变量,那么获取过程就是我所谓的“入口”。因为只有找到这个入口,才能拿到application对象。我们看看java程序,在servlet中可以通过
Application=request.getSession().getServletContext();
来获取到application。
看明白了没?我们要用的全局变量,大多数情况下都是存在于Application这个对象里面的,也就是说全局变量是隶属于应用的。
android一样有获取的方法:
Application=(MyApp)context.getApplicationContext();
与众不同,全局变量的对象结构是可以在android配置文件AndroidManifest.xml里面预定义的:
<application
android:name="deco.sfe.global.MyPara"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
这段配置里面的
android:name="deco.sfe.global.MyPara"
就是Android应用在启动时加载什么样的全局变量对象。这个对象可以自己定义。这是我定义的:
deco.sfe.global.MyPara.java
:
package deco.sfe.global;
import java.util.HashMap;
import android.app.Application;
public class MyPara extends Application{
/**全局变量*/
private String userid;
private String user;
private String pwd;
private String orgid;
private String token;
private String ver;
private String release_date;
private String conpany;
private String dfam_path;
private String service_time;
private String MIME;
private String uploadUrl;//拍照图片上传地址
private boolean isRememberPwd=false;
private HashMap<String,String> services=new HashMap<String, String>();
public void addService(String serviceName,String serviceImplName){
services.put(serviceName, serviceImplName);
}
public String getService(String serviceName){
return services.get(serviceName);
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getOrgid() {
return orgid;
}
public void setOrgid(String orgid) {
this.orgid = orgid;
}
public String getVer() {
return ver;
}
public void setVer(String ver) {
this.ver = ver;
}
public String getRelease_date() {
return release_date;
}
public void setRelease_date(String release_date) {
this.release_date = release_date;
}
public String getConpany() {
return conpany;
}
public void setConpany(String conpany) {
this.conpany = conpany;
}
public String getDfam_path() {
return dfam_path;
}
public void setDfam_path(String dfam_path) {
this.dfam_path = dfam_path;
}
public String getService_time() {
return service_time;
}
public void setService_time(String service_time) {
this.service_time = service_time;
}
public String getMIME() {
return MIME;
}
public void setMIME(String mIME) {
MIME = mIME;
}
public boolean isRememberPwd() {
return isRememberPwd;
}
public void setRememberPwd(boolean isRememberPwd) {
this.isRememberPwd = isRememberPwd;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUploadUrl() {
return uploadUrl;
}
public void setUploadUrl(String uploadUrl) {
this.uploadUrl = uploadUrl;
}
@Override
public void onCreate() {
super.onCreate();
ExceptionHandler exceptionHandler = ExceptionHandler.getInstance();
exceptionHandler.init(getApplicationContext());
}
}
其中的onCreate方法,是一个全局的异常处理办法的入口。其他文档中会集中介绍。
有了配置和定义之后,我们可以在任何需要的地方将MyPara调用出来。只需要写:
MyPara myPara=(MyPara)context.getApplicationContext();
就可以将Application拿出来以调用里面的全局变量。
欢迎光临 德克云技术联盟 (http://www.decoclouds.com/)