那些年重温GreenDao时遇到的坑

最近在找工作,总结一下以前做过的项目和使用过的框架,关于GreenDao的框架使用有点忘记了,重新调试了一下,尝试了一些新的做法,遇到了一些问题,记录一下。

GreenDao引入项目的步骤如下:

  1. 在project的build.gradle的dependcies中添加GreenDao的classpath项,如下:
    dependencies {
            classpath 'com.android.tools.build:gradle:2.3.3'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
        }

  2. 在app的build.gradle添加plugin和依赖包:
    apply plugin: 'org.greenrobot.greendao'

    dependencies {
        ……
        compile 'org.greenrobot:greendao:3.2.2'
    }
    只需要添加这一个包即可。如果你添加的是greedao-generator或者greedao-api,也必须加上这个才可以,不然gradle编译通不过。
    指定生成DaoMaster、DaoSession和BeanDao类所在路径
        greendao{
            schemaVersion 1
            daoPackage 'com.support.android.designlibdemo.gen'
            targetGenDir 'src/main/java'
        }
    schemaVersion: 指定数据库schema版本号,数据库、迁移等操作会用到;
    daoPackage: dao的包名,包名默认是entity所在的包;
    targetGenDir: 生成数据库文件的目录;
    
  3. 创建一个实体类,如User类,在其中必须要通过@Id指定一个id字段,且该字段必须是long或者是Long类型的(网上有人说必须是Long类型的,是不对的,经实测基本类型的long类型也可以)。需要多说一点的是,编译后会在该类的构造方法上自动添加@Generated的注解,并且生成一个hashcode,此外还会自动生成一个带有@Generated注解和hashcode的无参的构造方法,如果对该类进行修改(如修改了参数名或参数类型),必须要删除带参的构造方法上的hashcode,重新编译让它自动生成一个新的code。无参的没关系,我的理解是无参的构造方法没有改变,所以hashcode可以是用原来的。还有一点要说明的是指定的id字段如果没有被
    @Property(nameInDb = "my_id")注解,则在数据库中会默认保存成_id列名,不管你在该类中给它命名为什么。
  4. 为了方便管理,一般都会创建一个DaoManager类,实例化DaoMaster.DevOpenHelper、DaoMaster、DaoSession,并使用这些实例化后的对象进行增删改查的操作,具体写法网上有很多(比如这个Android数据存储之GreenDao 3.0 详解),这里就不再赘述。
在编译通过后,运行时一直报column xxx 不存在的错误,有可能是新的数据库列名和已经生成了数据库列名不一致,这时候只要把该app的数据清除掉,重新运行安装即可。

你可能感兴趣的:(移动开发,Android)