Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
1级android之后无法保存嵌套的ForeignCollectionField_Android_Ormlite - Fatal编程技术网

1级android之后无法保存嵌套的ForeignCollectionField

1级android之后无法保存嵌套的ForeignCollectionField,android,ormlite,Android,Ormlite,您好,我正在尝试在数据库中保存嵌套的arrayList 我正在使用ForeignCollectionField保存它,并已成功地将其保存在DB中。但当我试图从数据库中检索时。它不会返回存储的数据 您可以在突出显示的区域中看到。它节省了分贝 但当我尝试使用下面的查询检索时 DatabaseManager.getInstance(). getFirstMatching("surveyId", getIntent().getStringExtra("survey_id"), C

您好,我正在尝试在数据库中保存嵌套的arrayList

我正在使用ForeignCollectionField保存它,并已成功地将其保存在DB中。但当我试图从数据库中检索时。它不会返回存储的数据

您可以在突出显示的区域中看到。它节省了分贝

但当我尝试使用下面的查询检索时

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