很多Android开发者选择Greendao作为数据库使用工具,关于greendao的教程网络上也是一大堆,这里就不再介绍,主要是记录在项目中使用greendao出现的一个小问题,greendao的地址如下:greendao
事先说一下,我项目中使用的是greendao3.2.2
出现的主要问题是:NoClassDefFoundError
问题,具体的报错信息如下,这里是部分的,而且是从网络上找的,主要自己的那时候没记录,然后直接从网络上摘取部分。
java.lang.NoClassDefFoundError: org.greenrobot.greendao.query.WhereCollector
at org.greenrobot.greendao.query.QueryBuilder.<init>(QueryBuilder.java:85)
at org.greenrobot.greendao.query.QueryBuilder.internalCreate(QueryBuilder.java:73)
at org.greenrobot.greendao.AbstractDao.queryBuilder(AbstractDao.java:793)
at com.luckytry.luckylibrary.MyAplication.APPAplication.initData(APPAplication.java:132)
at com.luckytry.luckylibrary.MyAplication.APPAplication.initDB(APPAplication.java:117)
at com.luckytry.luckylibrary.MyAplication.APPAplication.onCreate(APPAplication.java:39)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1009)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4655)
at android.app.ActivityThread.access$1800(ActivityThread.java:143) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680) at dalvik.system.NativeStart.main(Native Method)
这个问题不同于ClassNotFond
,程序不会崩,但是就是没有数据,然后就是显示空白界面。从网络找的,很多都是添加如下的依赖:
compile 'com.android.support:multidex:1.0.1'
然后自己的Application
继承于android.support.multidex.MultiDexApplication
,然后在清单文件中添加自己的Application
,
接着是在Application
中实现如下:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
但是,实际运行之后发现,还是没有解决这个问题,还是报一样的错。
经过继续Google之后,找到了另外一种解决的办法,就是在项目中添加:
compile 'net.zetetic:android-database-sqlcipher:3.5.7'
这样发现能解决问题,所以在这里记录下。