分享到:

西安雁塔兆隆计算机培训中心西安软件开发,西安java培训,全国领先的软件开发培训

联系资料

西安雁塔兆隆计算机培训中心
所在地区:
陕西省 西安市
公司主页:
暂无
电话号码:
029-*******
传真号码:
暂无
联 系 人:
王老师
移动电话:
1592*******
电子邮箱:
暂无

关于Android程序使用全局变量

发布于:2013年01月14日 来源:www.szfuhai.com
[摘要]前阵子参加了google Android开发大赛,在我们组的程序中需要使用一个全局变量,这个变量主要用于存储通过I/O读入的xml文件流,通过kxml2解析器进行dom解析,为了不用每次查询该xml文件(因为i/o操作的代价比较大),所以使用全局InputStream来存储,但是因为

 前阵子参加了google Android开发大赛,在我们组的程序中需要使用一个全局变量,这个变量主要用于存储通过I/O读入的xml文件流,通过kxml2解析器进行dom解析,为了不用每次查询该xml文件(因为i/o操作的代价比较大),所以使用全局InputStream来存储,但是因为是在Android平台上进行操作,所以与在PC上的操作方法有所不同,当时采用的方法如下:

  1.首先将xml文件放在Android系统的asset文件夹下

  2.在程序启动的Activity中,在onCreate中插入读取xml数据流,然后将这个流InputStream传给存储全局变量的类XmlTool中的静态方法setValue(InputStream is)

  XmlTool的构造如下:

  XmlTool{

  public static KXml2 kxml2;

  public static void setValue(InputStream is){

  if(kxml2=null)

  kxml2 = new KXml2(is);

  }

  }

  在XmlTool中通过KXml2的构造函数public KXml2(InputStream is)去设置用于解析的parser,doc和root,这样问题就解决了,当时多亏了Jake和队友的帮助,因为已经是提交的前一天了,所以挺着急的的当时。

  后来在网上看了另一种方法,将自己的理解写出来:

  public class MyApp extends Application {

  private Integer[] state;

  public Integer[] getState() {

  return state;

  }

  public void setState(Integer[] state) {

  *** = state;

  }

  @Override

  public void onCreate() {

  // TODO Auto-generated method stub

  ***te();

  setState(we);

  }//一定要在onCreate方法里给变量赋值

  public Integer[] we=new Integer[]{

  ***le.b_0,***le.b_1,***le.b_2,

  ***le.b_3,***le.b_4,***le.b_5

  };

  }

  在所需要的activity中使用

  MyApp appState = (MyApp)getApplicationContext();

  Integer[] we = ***te();

  来获取,最后一步别忘了在manifest中的application标签中添加 android:name=".MyApp"(这儿不是新建< application>< /application>),注意这里继承的是Application,当时我也想过用一个Activity来实现,但是jake的建议是如果是Activity那么最好在前台显示,这个显然不太合理,而这里使用Application不会有这个问题,同样我们可以在onCreate的时候将I/O操作加进去,然后使用一个非static的 KXml2的对象进行xml文件的解析,这里不会每次创建,因为是交由系统注入的,有点类似于Spring的思想,因此也能解决这个问题。

(责任编辑:北大青鸟西安兆隆)