使用Realm
构建代码时出现以下错误:app:compileDebugJavaWithJavac注意:处理类 DataBaseQuestion错误:没有参数的默认公共构造函数 如果声明了自定义构造函数,则必须声明。注意:创建 DefaultRealmModule警告:类型' io.realm.DefaultRealmModule'的文件 在上一轮创建的不会受到注释 处理。警告:文件类型 ' io.realm.DefaultRealmModuleMediator'在上一轮创建将 不受注释处理。 2警告错误:执行 任务失败':app:compileDebugJavaWithJavac'。
编译失败;有关详细信息,请参阅编译器错误输出。
注意:我的模型或Java Bean类中已存在默认构造函数。
任何人都可以帮我解决这个问题吗?
DataBaseQuestion.java
public class DataBaseQuestion extends RealmObject{
int id;
String Question =null;
String QuestionNo =null;
List<String> optionList=null;
String typeOfQuestion=null;
String Answer = null;
String Explanation = null;
DataBaseQuestion()
{
}
public DataBaseQuestion(int id, String question, String questionNo, List<String> optionList, String typeOfQuestion, String answer, String explanation) {
this.id = id;
Question = question;
QuestionNo = questionNo;
this.optionList = optionList;
this.typeOfQuestion = typeOfQuestion;
Answer = answer;
Explanation = explanation;
}
public String getQuestion() {
return Question;
}
public void setQuestion(String question) {
Question = question;
}
public String getQuestionNo() {
return QuestionNo;
}
public void setQuestionNo(String questionNo) {
QuestionNo = questionNo;
}
public List<String> getOptions() {
return optionList;
}
public void setOptions(List<String> optionList) {
this.optionList = optionList;
}
public String getTypeOfQuestion() {
return typeOfQuestion;
}
public void setTypeOfQuestion(String typeOfQuestion) {
this.typeOfQuestion = typeOfQuestion;
}
public String getAnswer() {
return Answer;
}
public void setAnswer(String answer) {
Answer = answer;
}
public String getExplanation() {
return Explanation;
}
public void setExplanation(String explanation) {
Explanation = explanation;
}
@Override
public String toString() {
return "DataBaseQuestion{" +
"Question='" + Question + '\'' +
", QuestionNo='" + QuestionNo + '\'' +
", options=" + optionList +
", typeOfQuestion='" + typeOfQuestion + '\'' +
", Answer='" + Answer + '\'' +
", Explanation='" + Explanation + '\'' +
'}';
}
答案 0 :(得分:9)
错误:必须声明没有参数的默认公共构造函数
您可以将所需的default constructor
添加到指定的类并返回。
更改
DataBaseQuestion() {
}
到
public DataBaseQuestion() {
}
答案 1 :(得分:3)
你忘记了公共修饰符。
您的程序可能会尝试在程序包上下文之外到达它,这意味着它只查找公共构造函数。它找到一个 - 需要构造函数args的那个,但是没有看到包私有的。添加&#34; public&#34;访问修饰符应解决问题。
public DataBaseQuestion(){}
注意:您应该在业余时间查看lombok,这样您就不会手动处理getter,setter,AllArgsContsructors或NoArgsConstructors的创建
答案 2 :(得分:1)
此错误的另一个可能原因是定义了从RealmObject继承的包私有对象。
它失败的原因与前面提到的答案相同:默认构造函数是package-private,因此注释处理器无法访问。宣布班级公开修复它。
更改
class DataBaseQuestion extends RealmObject { }
到
public class DataBaseQuestion extends RealmObject { }
答案 3 :(得分:0)
这的另一个原因可能是在不同的包中错误地两次声明了该类。
如果您定义班级:
public class DataBaseQuestion extends RealmObject {
....
}
然后将您的代码复制到单独的目录中
或将其作为static
类嵌套在另一个类中,则可以引发完全相同的错误。