- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在我的应用程序中使用 retrofit2.0
和 simpleframework.xml
库。
问题是当我在没有 proguard 的情况下运行应用程序时它工作正常但是当我运行 proguard 时我在日志中收到以下错误。
E/ERROR: java.lang.RuntimeException: org.simpleframework.xml.core.PersistenceException: Constructor not matched for class A
类 A 没有/默认构造函数应该可以工作。我仍然添加了一个No Argument Constructor。但这并没有解决问题。
A 级
@Root(name = "data",strict = false)
public class A {
@Element(name = "baseurl",required = false)
private String baseURl;
@Element(name = "country_code")
private String country_code;
// Setters and getters
}
如您所见,没有构造函数(添加默认的空构造函数可以解决问题)。所以默认的 No Argument Constructor 应该也能正常工作。但是我尝试使用以下构造函数,这消除了错误。
public A(@ELement(name = "baseurl") String baseUrl,
@Element(name = "country_code") String country_code) { // Add all the elements from the xml in the constructor i.e. if a new element is added a new constructor would have to be written.
baseURl = baseUrl;
this.country_code = country_code;
}
但是如果我想这样做,我有太多的文件要更改。除了需要映射所有值的构造函数之外,不应该是必需的。我有很多类包含 50 多个成员变量(我简化了示例类以仅包含两个成员变量)。此类包含大约 30 个代码,代码太长而无法在此处发布。
问题是我有很多类在假设每个类都没有参数构造函数的情况下工作。
简单地为所有添加构造函数是不可行的。
我的proguard-rules.pro(只有相关的lib混淆规则)。
#-keepattributes *Annotation*
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-dontwarn com.bea.xml.stream.**
-dontwarn org.simpleframework.xml.stream.**
-keep class org.simpleframework.xml.**{ *; }
-keepclassmembers,allowobfuscation class * {
@org.simpleframework.xml.* <fields>;
@org.simpleframework.xml.* <init>(...);
}
可能值得注意的是,在此错误之前我得到了
E/ERROR: java.lang.RuntimeException: org.simpleframework.xml.core.ElementException: Element 'version' does not have a match in class A at line 1
通过在 @Element
注解中添加 'name' 参数解决了这个问题。所以我不愿意更改所有文件的原因之一是如果出现另一个错误怎么办。
编辑 1:因此,在寻找解决方案 2 天后,我放弃了,并最终将构造函数添加到所有类中。问题是库只为可用的 xml-tags 调用构造函数。如果只有 country_code 在 xml 中可用,则对于上述 A 类
<xml>
<data>
<country_code>PK</country_code>
</data>
</xml>
然后我需要一个只有一个 country_code 参数的构造函数来让它工作
public A(@Element(name = "country_code") String country_code) {
this.country_code = country_code;
}
这使得找到的解决方案无法使用。
编辑 2:找到了解决方法!将 POJO 类保留在混淆规则中可以修复此错误。但我宁愿不保留这些类(class)。
所以我至少暂时保留这个问题,或者直到有人告诉我为什么我应该保留这些文件。
最佳答案
我猜你的问题是你没有保留任何属性,这显然取决于你使用的属性。就我而言,这就是我处理它的方式,让我知道它是否适合您:
## https://square.github.io/retrofit/ ##
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
## Simple XML ##
-dontwarn org.simpleframework.xml.stream.**
-keep public class org.simpleframework.** { *; }
-keep class org.simpleframework.xml.** { *; }
-keep class org.simpleframework.xml.core.** { *; }
-keep class org.simpleframework.xml.util.** { *; }
-keepattributes ElementList, Root, *Annotation*
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
关于android - 混淆器 - PersistenceException : Constructor not matched for class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47407587/
我遇到了一个使用 Toplink essentials 作为持久性提供程序的 java 桌面应用程序的奇怪行为。 我有一个目录,其中包含我的应用程序所需的一切:一个 jar、一个 lib 文件夹和一个
我有 2 个实体: 大师: @Entity @Table(name = "master") public class Master implements java.io.Serializable {
我使用带有单个持久性单元的 OpenJPA 2.0。 在我的 persistence.xml 中,我选择使用配置 transaction-type="RESOURCE_LOCAL" 并手动管理事务。
我离开 Java 世界有一段时间了,我对 JPA 还很陌生。我有一个数据模型,其中 WindTurbines 可以有多个 PerformanceCurve,而 PerformanceCurve 又包含
我正在使用 Play Framework 1.2.5 和 Java,但这更多是一个 JPA 问题。 在我的项目中,我经常通过电子邮件搜索用户,因此我创建了以下方法: public static Use
我正在使用 EclipseLink 运行 Web 服务,它运行良好。但有时我会收到一个异常提示“无法预部署 PersistenceUnit”。我不知道为什么我会得到这个。其他一切似乎都正常,异常似乎不
我正在尝试使用EclipseLink作为ORM和Gradle与Jersey一起建立一个测试REST项目。 当我想测试ORM功能时,遇到以下异常: Exception in thread "main"
我们正在尝试使用 JPA 构建 JSF 应用程序。现在,我们想要实现登录功能,但是当我们在 glassfish 服务器上运行应用程序时,出现异常: javax.persistence.Persiste
我在 Play Framework 2.2.3 中有以下文件 Controller : public class Comment extends Controller { public Res
我有一个 Topic 类,它扩展了 Model。 创建表主题的第一条记录很好,但无法创建另一条记录: [PersistenceException: ERROR executing DML bindLo
我正在尝试使用 Java、EJB、JPA 和 MYSQL 数据库编写应用程序。Eclipse 版本 - eclipse Indigo服务器- JBOSS v5.0 当我启动服务器并尝试在服务器上运行我
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在学习hibernate,遇到了异常——javax.persistence.PersistenceException但是我不明白这样做的确切原因。什么场景会抛出这个异常? 最佳答案 使用 Entit
我是 Hibernate、servlet 的新手。我正在尝试使用 hibernate 从 html 注册表将数据存储在 mysql 数据库中。但是我不断收到此错误作为根本原因。这是弹出的两个根本原因。
给出这个简单的例子(https://github.com/lelmarir/jpa-cascade-bug-test): runInTransaction(em, () -> { Parent
我是 JPA 的新手,当我尝试运行以下代码时,它显示错误为“cvc-elt.1: 找不到元素‘persistence’的声明。” 我无法修复这个错误,你能帮我解决这个问题吗? 干杯 拉杰什 持久化.x
我遇到了 JPA 异常 "javax.persistence.PersistenceException: Transaction failed to flush" 然后我从系统中删除了本地数据存储(d
造成原因: java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it doe
我正在调用一个函数,该函数试图检查我的 MYSQL 表中是否存在特定记录。 函数: public String get_value(long nodeid,String ts) {
我在我的应用程序中使用 retrofit2.0 和 simpleframework.xml 库。 问题是当我在没有 proguard 的情况下运行应用程序时它工作正常但是当我运行 proguard 时
我是一名优秀的程序员,十分优秀!