使用 greenDao 时出现 NoClassDefFoundError

Posted

技术标签:

【中文标题】使用 greenDao 时出现 NoClassDefFoundError【英文标题】:NoClassDefFoundError when using greenDao 【发布时间】:2012-05-12 17:45:55 【问题描述】:

我正在使用 greenDao 访问我的 android 手机中的数据库。一切似乎都很好,并且遵守了。但是当我运行程序时,它在 DaoMaster.java -> OpenHelper 类,createAllTables(db, false) 处的 onCreate 方法处崩溃;

以下是异常消息:

>05-03 15:40:34.109: E/AndroidRuntime(28587): FATAL EXCEPTION: main
05-03 15:40:34.109: E/AndroidRuntime(28587): java.lang.NoClassDefFoundError: com.hook38.sporttimer.model.sql.DaoMaster
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.hook38.sporttimer.model.sql.DaoMaster$OpenHelper.onCreate(DaoMaster.java:42)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:165)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.hook38.sporttimer.controller.CountdownTimerStoreController.<init>(CountdownTimerStoreController.java:32)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.hook38.sporttimer.controller.CountdownTimerController.<init>(CountdownTimerController.java:57)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.hook38.sporttimer.CountDownTimerActivity.onCreate(CountDownTimerActivity.java:49)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.Activity.performCreate(Activity.java:4465)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.os.Looper.loop(Looper.java:137)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at android.app.ActivityThread.main(ActivityThread.java:4424)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at java.lang.reflect.Method.invokeNative(Native Method)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at java.lang.reflect.Method.invoke(Method.java:511)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-03 15:40:34.109: E/AndroidRuntime(28587):    at dalvik.system.NativeStart.main(Native Method)

我对 NoClassDefFoundError 做了一些研究,这意味着 CLASSPATH 没有正确设置。但我检查了构建路径,greenDao.jar 在库中。有什么我错过了吗??

【问题讨论】:

看到这个答案***.com/a/10046725/1289716 ***.com/questions/9857539/noclassdeffounderror-when-googleanalyticstracker-getinstance/9857669#9857669 【参考方案1】:

我解决了这个问题。我使用的是 DaoExample 项目中的 greenDao.jar 文件。解决这个问题的方法是......从我的 java 构建路径中删除原始的 greenDao.jar。在我的项目下创建一个名为 libs 的文件夹。从 DaoExample 项目的 libs 文件夹中复制 geenDao.jar 文件,并将其粘贴到我自己项目的 libs 文件中。转到 Java 构建路径、库、导入 jar,然后添加新粘贴的 jar 文件。哇~

【讨论】:

看起来很简单。感谢您发布您的决议。【参考方案2】:

解决方案非常简单 - 确保导出 Maven 依赖项:

    Project Properties -> Java Build Path -> Order and Export -> 勾选Maven Dependencies 清理项目

【讨论】:

以上是关于使用 greenDao 时出现 NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Eclipse 中运行 hadoop 作业时出现异常

GreenDao操作本地db文件(使用greendao 新版3.2.2 )

GreenDao使用

android greenDao使用

记一次使用GreenDao的小“坑”

记一次使用GreenDao的小“坑”