我使用以下ProGuard规则:
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { *; }
-keep class **$Properties
-keep class org.greenrobot.greendao.**
-keepclassmembers class org.greenrobot.greendao.** { *; }
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**
启动应用程序时,我收到以下崩溃日志:
java.lang.RuntimeException: Unable to create application my.app.package.MyApplication: org.greenrobot.greendao.DaoException: Could not init DAOConfig at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4569) at android.app.ActivityThread.access$1500(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig at …
我最近开始在我的Android应用程序中使用GreenDao,我正在创建一个类别实体,它应该有多个类别实体作为子项.因此我使用树关系如下:
Entity category = schema.addEntity("Category");
...
Property parentIdProperty = category.addLongProperty("parentId").getProperty();
category.addToOne(category, parentIdProperty).setName("parent");
category.addToMany(category, parentIdProperty).setName("children");
Run Code Online (Sandbox Code Playgroud)
这是根据需要创建正确的代码,我有以下内容:
private List<Category> children;
Run Code Online (Sandbox Code Playgroud)
问题
问题是我需要在此属性之前使用@SerializedName属性,因为我正在将具有不同字段名称的一些json(从另一个服务获得)解析为这些Category实体.
对于其他属性,我使用codeBeforeField()方法正确生成属性:
category.addStringProperty("categoryId").codeBeforeField("@SerializedName( \"Id\" )");
Run Code Online (Sandbox Code Playgroud)
有没有办法在这个'children'属性上设置codeBeforeField以添加@SerializedName属性?或者也许还有其他方法可以在我的'children'属性之前生成这个属性?
我试图寻找方法,所以在关系上设置这个,但似乎这个方法只在PropertyBuilder上可用.有没有办法从ToMany关系中检索PropertyBuilder?
任何帮助,将不胜感激.谢谢.
上述错误有很多问题,但其中大部分与 eclipse 相关,对我来说,它发生在 android studio 中,也适用于迄今为止运行良好的项目。
我的 android 项目一直运行良好,然后突然开始出现此构建错误。不知道问题到底出在哪里,但我在日志中看到了一些关于 greendao 的痕迹。
FAILURE:构建失败,出现异常。
任务 :driver_module:greendao FAILED 发现 2 个解析“/Users/../Code/MyApplication/driver_module/src/main/java/../sdk/MyEvents.java”的问题:#0 @1:类型 java .lang.Object 无法解析。它是从所需的 .class 文件间接引用的(ID:16777540;错误:true)#1 @1:无法解析类型 java.lang.String。它是从所需的 .class 文件间接引用的(ID:16777540;错误:true)
编辑:我发现这有点接近,但这对我也不起作用。 https://github.com/greenrobot/greenDAO/issues/931
我正在使用greenDAO for Android,我想编辑greenDAO生成器,因为它会覆盖我每次在数据库上更改内容时需要的@SerializedName.
所以我通过文件 - >新建 - >导入模块将https://github.com/greenrobot/greenDAO中的 greenDAO添加到我的Android Studio项目中,然后选择了GreenDaoGenerator模块.
接下来,我构建我的java模块来生成greenDAO数据库,它使用GreenDaoGenerator模块作为依赖项,我得到一个例外,找不到模板dao.ftl.
有人可以帮帮我吗?我是Android的新手,不检查,为什么它找不到该文件.
Exception in thread "main" java.io.FileNotFoundException: Template "dao.ftl" not found.
at freemarker.template.Configuration.getTemplate(Configuration.java:742)
at freemarker.template.Configuration.getTemplate(Configuration.java:665)
at de.greenrobot.daogenerator.DaoGenerator.<init>(DaoGenerator.java:65)
at com.example.GreenDaoCreater.main(GreenDaoCreater.java:39)
Run Code Online (Sandbox Code Playgroud)
编辑:这是项目结构的截图.我希望它有所帮助.
