德克云技术联盟

标题: 探索新技术经验分享(五)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/)