使用 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 作业时出现异常