简单家庭记账本app开发进度四

在用测试数据简单完成记账的功能后,开始着手将测试数据替换为数据库的储存,通过数据书的读写来实现记账功能的实现。在学习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();
    }
原文地址:https://www.cnblogs.com/weixiao1717/p/12315401.html