GreenDao使用,Android5.0以下报错崩溃及解决

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Maiduoudo/article/details/100076987

GreenDao:

GreenDao是近段时间比较流行的数据库框架,当然优先选择GreenDao,不过在使用这个数据库的时候真的有许多需要注意的地方,我在下面先列举一下,以后遇到问题都回来更新自己的博客。

优势:

  • 性能最大化
  • 内存开销最小
  • API 简单好用
  • 对Android 高度优化
  • 2.2版本以上还支持加密数据库
  • 支持protobuf协议存储(protobuf 比json更快,google的优秀产品,因此greendao能很好地与retrofit 2.0结合protobuf网络请求并缓存)

Android5.0以下报错信息:

android4.4æ¥çbug

 

----先稍微讲讲GreenDao在配置时要配置的注意项-------------------------

集成

首先估计大家都是要先集成数据库,我要告诉大家的是在GreenDao3.0之前需要新建一个model来进行辅助创建,但是在GreenDao3.0以后集成数据库更简单了,不用再新建model了,当然,你要是一定要新建,也是可以的;

关于集成到项目使用,大家参考我的另一篇博客:GreenDao3.2的使用,让你本地数据库操作坐上了高铁
具体新建Bean类后怎么与GreenDao关联等步骤这里就不细说,参见GreenDao3.2的使用,让你本地数据库操作坐上了高铁


集成之后要注意,GreenDao进行自定义代码生成位置,如果我们不自定义,就会生成在build文件夹里,当然这样虽然简单,但是看起来不是很直观,所以我们要自己自定义一个生成数据库代码的位置,怎么做呢?

不进行代码自动生成的位置配置,就会在如下图中位置出现。

                                              

当然不进行位置生成文件夹指定,也不影响功能使用。

配置:

app/build.gradle/  的

android {
    compileSdkVersion 25
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.demo.xxx"
        minSdkVersion 16
        targetSdkVersion 25
         ....
         ....  
    }
  
    greendao {
        //数据库的schema版本,也可以理解为数据库版本号
        schemaVersion 1
        //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。
        daoPackage 'com.demo.xxx.greendao'
        //设置DaoMaster、DaoSession、Dao目录
        targetGenDir 'src/main/java'
//        generateTests false //设置为true以自动生成单元测试。
//        targetGenDirTests 'src/main/java' //应存储生成的单元测试的基本目录。默认为 src / androidTest / java。
    }
}
  • daoPackage :  设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。"com.demo.xxx"是你项目的applicationId 
  • schemaVersion :数据库版本号,涉及到数据库字段的增删或者其他都会进行版本的增加等
  • targetGenDir : 'src/main/java' ,设置DaoMaster、DaoSession、Dao目录
  • 这里比较重要的是要设置schemaVersion

创建实体

创建实体,来生成我们的数据库

具体新建Bean类后怎么与GreenDao关联等步骤这里就不细说
写完实体类,点击菜单栏中的build一下项目,会生成DaoMaster等类文件

这里我创建的示例实体为NFCInfoBean.java

编译之后就会在项目的com.demo.xxx.greendao文件夹下生成一个NFCInfoBeanDao.java文件

编译项目

配置好引入与基本配置后,我们要进行项目编译生成GreenDao的自动生成的文件。DaoMaterDaoSession...

编译:菜单build/Make Project  

这就生成在我们自定义的包里面了

                            


这样我们就可以去使用GreenDao数据库的增删改查了,至于怎么去操作,网上有很多教程。
要解决的问题是什么呢? 
就是版本兼容问题,我不知道大家有没有遇到过,就是我们在使用GreenDao数据库的时候会发现,在android5.0以上的系统版本,没什么问题,我们可以正常运行,这也没问题,但是在android5.0以下版本就会报错,报什么错呢?很奇葩,大家直接看代码: 

android4.4æ¥çbug

在GitHub上面,issue出现了这个问题,但是GreenDao团队给出的回答是这样的 :

解å³æ¹æ¡

有没有很模糊,其实他也说是分包的问题,这里我声明一下,的确是分包问题,首先在android5.0以上不牵扯MultiDex分包问题,但是在android4.4甚至以下版本就有这个,但是怎么解决呢?我们需要引入一个包:

implementation 'com.android.support:multidex:1.0.0'

引入这个来解决分包问题

1.引入方式:

  1. 从sdk\extras\android\support\multidex\library\libs 目录将android-support-multidex.jar导入工程中
  2. app/build.gradle/  文件中
    dependencies {
       implementation 'com.android.support:multidex:1.0.0'
    }

2.引入配置注意:

如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类, 
如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:

一. 从sdk\extras\android\support\multidex\library\libs 目录将android-support-multidex.jar导入工程中
二. 如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类, 
如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:

public class MyApplication extends XXXApplication {  
    @Override  
    protected void attachBaseContext(Context base) {  
        super.attachBaseContext(base);  
        MultiDex.install(this);  
    }
}  

然后这样的话就可以解决我们的项目在android4.4以下版本中报错找不到java.lang.NoClassDefFoundError: org.greenrobot.greendao.database.StandardDatabase

结语:
相关文章:

Android 使用android-support-multidex解决Dex超出方法数的限制问题

GreenDao3.2的使用,让你本地数据库操作坐上了高铁


非常感谢  事情往往烟消云散 同学的这篇博客,如果大家还有什么问题,可以留言。

猜你喜欢

转载自blog.csdn.net/Maiduoudo/article/details/100076987