1级android之后无法保存嵌套的ForeignCollectionField
您好,我正在尝试在数据库中保存嵌套的arrayList 我正在使用ForeignCollectionField保存它,并已成功地将其保存在DB中。但当我试图从数据库中检索时。它不会返回存储的数据 您可以在突出显示的区域中看到。它节省了分贝 但当我尝试使用下面的查询检索时1级android之后无法保存嵌套的ForeignCollectionField,android,ormlite,Android,Ormlite,您好,我正在尝试在数据库中保存嵌套的arrayList 我正在使用ForeignCollectionField保存它,并已成功地将其保存在DB中。但当我试图从数据库中检索时。它不会返回存储的数据 您可以在突出显示的区域中看到。它节省了分贝 但当我尝试使用下面的查询检索时 DatabaseManager.getInstance(). getFirstMatching("surveyId", getIntent().getStringExtra("survey_id"), C
DatabaseManager.getInstance().
getFirstMatching("surveyId", getIntent().getStringExtra("survey_id"), CampaignDetails.class);
结果如下
下面是我用来在数据库中保存数据的代码
activitydetails.java
public class CampaignDetails extends UpdateableManagedObject {
@DatabaseField
private String campaignTitle;
@DatabaseField
private String surveyTitle;
@DatabaseField
private int surveyId;
@ForeignCollectionField(eager = true, maxEagerLevel = 4)
public ForeignCollection<QuestionDetail> questionDetail;
public static void fromJson(JSONObject json) {
if (json == null) return;
int id = json.optInt("surveyId", 0);
if (id == 0) return;
CampaignDetails result = DatabaseManager.getInstance().getFirstMatching("surveyId", id, CampaignDetails.class);
boolean created = result == null;
if (created) {
result = new CampaignDetails();
result.surveyId = id;
}
result.questionDetail = result.getDao().getEmptyForeignCollection("questionDetail");
result.campaignTitle = json.optString("campaignTitle");
result.surveyTitle = json.optString("surveyTitle");
result.hasCreated = true;
try {
fromJsonArray(json.getJSONArray("questionDetail"), result);
} catch (JSONException e) {
e.printStackTrace();
}
if (created) result.create();
else result.update();
}
private static void fromJsonArray(JSONArray questionDetail, CampaignDetails campaignDetail) {
for (int i = 0; i < questionDetail.length(); i++) {
try {
JSONObject jsonObject = questionDetail.getJSONObject(i);
QuestionDetail result = DatabaseManager.getInstance().getFirstMatching("questionId", jsonObject.optString("questionId"), QuestionDetail.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionDetail();
}
result.question = jsonObject.optString("question");
result.questionId = jsonObject.optString("questionId");
result.questionType = jsonObject.optString("questionType");
if (jsonObject.has("questionChoices")) {
result.questionChoices = result.getDao().getEmptyForeignCollection("questionChoices");
result.fromJson(jsonObject.getJSONArray("questionChoices"), result);
}
campaignDetail.questionDetail.add(result);
result.campaignDetail = campaignDetail;
if (isCreated) {
result.create();
} else {
result.update();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
public class CampaignDetails extends UpdateableManagedObject {
@DatabaseField
private String campaignTitle;
@DatabaseField
private String surveyTitle;
@DatabaseField
private int surveyId;
@ForeignCollectionField(eager = true, maxEagerLevel = 2)
public ForeignCollection<QuestionDetail> questionDetail;
public ArrayList<QuestionDetail> getQuestionDetail() {
if (assessmentCache == null) {
refresh();
assessmentCache = new ArrayList<>();
if (questionDetail != null) {
for (QuestionDetail assessment : questionDetail) {
assessmentCache.add(assessment);
}
}
}
return assessmentCache;
}
public static void fromJson(JSONObject json) {
if (json == null) return;
int id = json.optInt("surveyId", 0);
if (id == 0) return;
CampaignDetails result = DatabaseManager.getInstance().getFirstMatching("surveyId", id, CampaignDetails.class);
boolean created = result == null;
if (created) {
result = new CampaignDetails();
result.surveyId = id;
result.create();
} else {
result.update();
}
result.questionDetail = result.getDao().getEmptyForeignCollection("questionDetail");
result.campaignTitle = json.optString("campaignTitle");
result.surveyTitle = json.optString("surveyTitle");
result.hasCreated = true;
try {
fromJsonArray(json.getJSONArray("questionDetail"), result);
} catch (JSONException e) {
e.printStackTrace();
}
result.update();
}
private static void fromJsonArray(JSONArray questionDetail, CampaignDetails campaignDetail) {
for (int i = 0; i < questionDetail.length(); i++) {
try {
JSONObject jsonObject = questionDetail.getJSONObject(i);
QuestionDetail result = DatabaseManager.getInstance().getFirstMatching("questionId", jsonObject.optString("questionId"), QuestionDetail.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionDetail();
} else {
continue;
}
result.questionChoices = result.getDao().getEmptyForeignCollection("questionChoices");
result.campaignDetail = campaignDetail;
result.question = jsonObject.optString("question");
result.questionId = jsonObject.optString("questionId");
result.questionType = jsonObject.optString("questionType");
campaignDetail.questionDetail.add(result);
if (jsonObject.has("questionChoices")) {
result.fromJson(jsonObject.getJSONArray("questionChoices"), result);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
有人能帮我解决问题吗?我真的被它卡住了,谢谢。我通过更改下面给出的两个文件中的代码顺序解决了这个问题 activitydetails.java
public class CampaignDetails extends UpdateableManagedObject {
@DatabaseField
private String campaignTitle;
@DatabaseField
private String surveyTitle;
@DatabaseField
private int surveyId;
@ForeignCollectionField(eager = true, maxEagerLevel = 4)
public ForeignCollection<QuestionDetail> questionDetail;
public static void fromJson(JSONObject json) {
if (json == null) return;
int id = json.optInt("surveyId", 0);
if (id == 0) return;
CampaignDetails result = DatabaseManager.getInstance().getFirstMatching("surveyId", id, CampaignDetails.class);
boolean created = result == null;
if (created) {
result = new CampaignDetails();
result.surveyId = id;
}
result.questionDetail = result.getDao().getEmptyForeignCollection("questionDetail");
result.campaignTitle = json.optString("campaignTitle");
result.surveyTitle = json.optString("surveyTitle");
result.hasCreated = true;
try {
fromJsonArray(json.getJSONArray("questionDetail"), result);
} catch (JSONException e) {
e.printStackTrace();
}
if (created) result.create();
else result.update();
}
private static void fromJsonArray(JSONArray questionDetail, CampaignDetails campaignDetail) {
for (int i = 0; i < questionDetail.length(); i++) {
try {
JSONObject jsonObject = questionDetail.getJSONObject(i);
QuestionDetail result = DatabaseManager.getInstance().getFirstMatching("questionId", jsonObject.optString("questionId"), QuestionDetail.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionDetail();
}
result.question = jsonObject.optString("question");
result.questionId = jsonObject.optString("questionId");
result.questionType = jsonObject.optString("questionType");
if (jsonObject.has("questionChoices")) {
result.questionChoices = result.getDao().getEmptyForeignCollection("questionChoices");
result.fromJson(jsonObject.getJSONArray("questionChoices"), result);
}
campaignDetail.questionDetail.add(result);
result.campaignDetail = campaignDetail;
if (isCreated) {
result.create();
} else {
result.update();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
public class CampaignDetails extends UpdateableManagedObject {
@DatabaseField
private String campaignTitle;
@DatabaseField
private String surveyTitle;
@DatabaseField
private int surveyId;
@ForeignCollectionField(eager = true, maxEagerLevel = 2)
public ForeignCollection<QuestionDetail> questionDetail;
public ArrayList<QuestionDetail> getQuestionDetail() {
if (assessmentCache == null) {
refresh();
assessmentCache = new ArrayList<>();
if (questionDetail != null) {
for (QuestionDetail assessment : questionDetail) {
assessmentCache.add(assessment);
}
}
}
return assessmentCache;
}
public static void fromJson(JSONObject json) {
if (json == null) return;
int id = json.optInt("surveyId", 0);
if (id == 0) return;
CampaignDetails result = DatabaseManager.getInstance().getFirstMatching("surveyId", id, CampaignDetails.class);
boolean created = result == null;
if (created) {
result = new CampaignDetails();
result.surveyId = id;
result.create();
} else {
result.update();
}
result.questionDetail = result.getDao().getEmptyForeignCollection("questionDetail");
result.campaignTitle = json.optString("campaignTitle");
result.surveyTitle = json.optString("surveyTitle");
result.hasCreated = true;
try {
fromJsonArray(json.getJSONArray("questionDetail"), result);
} catch (JSONException e) {
e.printStackTrace();
}
result.update();
}
private static void fromJsonArray(JSONArray questionDetail, CampaignDetails campaignDetail) {
for (int i = 0; i < questionDetail.length(); i++) {
try {
JSONObject jsonObject = questionDetail.getJSONObject(i);
QuestionDetail result = DatabaseManager.getInstance().getFirstMatching("questionId", jsonObject.optString("questionId"), QuestionDetail.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionDetail();
} else {
continue;
}
result.questionChoices = result.getDao().getEmptyForeignCollection("questionChoices");
result.campaignDetail = campaignDetail;
result.question = jsonObject.optString("question");
result.questionId = jsonObject.optString("questionId");
result.questionType = jsonObject.optString("questionType");
campaignDetail.questionDetail.add(result);
if (jsonObject.has("questionChoices")) {
result.fromJson(jsonObject.getJSONArray("questionChoices"), result);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
公共类活动详细信息扩展了UpdateableManagedObject{
@数据库字段
私人所有权;
@数据库字段
私人字符串调查;
@数据库字段
私人内部调查;
@ForeignCollectionField(Eanger=true,MaxEangerLevel=2)
公开征集外汇;
公共阵列列表getQuestionDetail(){
if(assessmentCache==null){
刷新();
assessmentCache=newarraylist();
if(questionDetail!=null){
对于(问题细节评估:问题细节){
assessmentCache.add(评估);
}
}
}
返回评估缓存;
}
公共静态void fromJson(JSONObject json){
if(json==null)返回;
int id=json.optInt(“surveyId”,0);
如果(id==0)返回;
ActivationDetails结果=DatabaseManager.getInstance().getFirstMatching(“surveyId”,id,ActivationDetails.class);
创建的布尔值=结果==null;
如果(已创建){
结果=新的活动详细信息();
result.surveyId=id;
result.create();
}否则{
result.update();
}
result.questionDetail=result.getDao().getEmptyForeignCollection(“questionDetail”);
result.activityle=json.optString(“activityTitle”);
result.surveytle=json.optString(“surveytle”);
result.hasCreated=true;
试一试{
fromJsonArray(json.getJSONArray(“问题细节”),result);
}捕获(JSONException e){
e、 printStackTrace();
}
result.update();
}
来自JSONArray的私有静态无效(JSONArray问题详细信息、活动详细信息、活动详细信息){
对于(int i=0;i
}
QuestionDetail.java
public class QuestionDetail extends ManagedObject {
@DatabaseField(foreign = true, foreignAutoRefresh = true)
public CampaignDetails campaignDetail;
@DatabaseField
public String question;
@DatabaseField
public String questionId;
@DatabaseField
public String questionType;
@ForeignCollectionField(eager = true,maxEagerLevel = 4)
public Collection<QuestionChoice> questionChoices;
public void fromJson(JSONArray choices, QuestionDetail questionDetail) {
for (int i = 0; i < choices.length(); i++) {
try {
JSONObject jsonObject = choices.getJSONObject(i);
QuestionChoice result = DatabaseManager.getInstance().getFirstMatching("choiceId", jsonObject.optString("choiceId"), QuestionChoice.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionChoice();
}
result.choiceId = jsonObject.optString("choiceId");
result.choice = jsonObject.optString("choice");
result.questionDetail = questionDetail;
questionChoices.add(result);
if (isCreated) {
result.create();
} else {
result.update();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
public class QuestionDetail extends ManagedObject {
@DatabaseField(foreign = true, foreignAutoRefresh = true)
public CampaignDetails campaignDetail;
@DatabaseField
public String question;
@DatabaseField
public String questionId;
@DatabaseField
public String questionType;
@ForeignCollectionField(eager = true, maxEagerLevel = 2)
public Collection<QuestionChoice> questionChoices;
public void fromJson(JSONArray choices, QuestionDetail questionDetail) {
for (int i = 0; i < choices.length(); i++) {
try {
JSONObject jsonObject = choices.getJSONObject(i);
QuestionChoice result = DatabaseManager.getInstance().getFirstMatching("choiceId", jsonObject.optString("choiceId"), QuestionChoice.class);
boolean isCreated = result == null;
if (isCreated) {
result = new QuestionChoice();
} else {
continue;
}
result.questionDetail = questionDetail;
result.choiceId = jsonObject.optString("choiceId");
result.choice = jsonObject.optString("choice");
questionDetail.questionChoices.add(result);
// result.create();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
公共类问题详细信息扩展ManagedObject{
@数据库字段(foreign=true,foreignAutoRefresh=true)
公众活动详情;
@数据库字段
公共字符串问题;
@数据库字段
公共字符串问号;
@数据库字段
公共字符串类型;
@ForeignCollectionField(Eanger=true,MaxEangerLevel=2)
公共募捐选择;
来自JSON的公共void(JSONArray选项,QuestionDetail QuestionDetail){
for(int i=0;i