进行开发4
在用测试数据简单完成记账的功能后,开始着手将测试数据替换为数据库的储存,通过数据书的读写来实现记账功能的实现。在学习Javaweb的过程中,数据库的操作都是在Dao层实现的,所以自己从网上查了查是否可以用Dao层实现安卓数据库的增删改查,答案是肯定的。自己于是将所有关于数据库的操作封装在Dao中,通过调用Dao层来实现数据库的操作,写的不太好,不过总算可以用。感觉安卓数据库SQL语句比Javaweb中数据库的操作简单好多。 遇到的困难: 1、进入到主界面时,系统提示已停止运行。原因:表不存在,安卓数据库只会初始化一次数据库中的表,第二次运行APP时由于数据库已存在,不再调用oncreate()方法。解决办法:卸载app重新安装,或重写updata()方法。 2、运行时提示数据库中某列不存在,这个是个低级错误,但自己经常犯,以后在建立数据库时一定要明确变量的名字,方便后期的数据库操作。 3、提示数据库存在泄露问题,自己当时就很懵,从网上查了下,大概意思就是在活动销毁的同时将数据库的连接关掉。可是还是提示泄露,没有办法,自己就尝试着优化下代码,当自己把Dao对象作为全局变量后,整个页面由只生成了一个数据库接口,提示少了那么几行,后来从网上看见将数据库操作对象改为单例模式,确保只生成一个对象,我看到后不得不佩服前辈们的经验。 4、提示主线程中进行了大量的耗时操作,可能会导致app停止运行。 原因; 每次数据列表发生变化时,主界面读取数据库中的数据,不断对总金额进行刷新。 解决办法:在子线程中获取组件,进行组件的刷新。 ~~~ 数据库操作对象单例模式代码: ~~~ private static DatabaseHelper helper=null; private SQLiteDatabase db; public synchronized static DatabaseHelper getHelper(Context context){ if(helper==null){ helper=new DatabaseHelper(context); } return helper; }; public AccountDao(Context context){ getHelper(context); db=helper.getWritableDatabase(); }