zoukankan      html  css  js  c++  java
  • 简单家庭记账本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();
        }
  • 相关阅读:
    [Vue] Create Filters in Vue.js
    [Vue] Import component into page
    [Angular Form] ngModel and ngModelChange
    [Ramda] Convert a QueryString to an Object using Function Composition in Ramda
    [Vue] Use basic event handling in Vue
    [Ramda] Declaratively Map Data Transformations to Object Properties Using Ramda evolve
    Linux2.6内核--VFS层中和进程相关的数据结构
    [置顶] Firefox OS 学习——Gaia 编译分析
    ORACLE 索引概述
    【笔试&面试】C#的托管代码与非托管代码
  • 原文地址:https://www.cnblogs.com/weixiao1717/p/12315401.html
Copyright © 2011-2022 走看看