使用 Realm 构建代码时出现以下错误
:app:compileDebugJavaWithJavac 注意:处理类 数据库问题错误:没有参数的默认公共构造函数 如果声明了自定义构造函数,则必须声明。注意:创建 DefaultRealmModule 警告:类型为'io.realm.DefaultRealmModule'的文件 在最后一轮中创建将不受注释 加工。警告:文件类型 在上一轮中创建的"io.realm.DefaultRealmModuleMediator"将 不受注释处理。2 警告 错误:执行 任务 ':app:compileDebugJavaWithJavac' 失败。
编译失败;有关详细信息,请参阅编译器错误输出。
注意:默认构造函数已经存在于我的模型或Java Bean类中。
任何人都可以帮我解决这个问题吗?
数据库问题.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 + ''' +
'}';
}
错误:必须声明没有参数的默认公共构造函数
您可以将所需的default constructor
添加到指定的类并回来查看。
改变
DataBaseQuestion() {
}
自
public DataBaseQuestion() {
}
你忘记了公共修饰符。
您的程序可能会尝试在包上下文之外访问它,这意味着它只查找公共构造函数。它找到了一个 - 需要构造函数参数的那个,但没有看到包私有的。添加"公共"访问修饰符应该可以解决问题。
public DataBaseQuestion(){}
注意:您应该在业余时间查看龙目岛,这样您就不会手动处理 getter、setter、AllArgsContsructor 或 NoArgsConstructors 的创建
此错误的另一个可能原因是定义了一个继承自 RealmObject 的包私有对象。
它失败的原因与上述答案相同:默认构造函数是包私有的,因此注释处理器无法访问。声明类公共修复了它。
改变
class DataBaseQuestion extends RealmObject { }
自
public class DataBaseQuestion extends RealmObject { }
造成这种情况的另一个原因可能是在不同的包中错误地声明了两次类。
如果定义类:
public class DataBaseQuestion extends RealmObject {
....
}
然后将代码复制到单独的目录中
或者让它作为static
类嵌套在另一个类中,那么可能会抛出这个完全相同的错误。