У меня есть функция, которая возвращает пользователю массив оценок. У каждого экзамена есть массив вопросов. Я получаю вопросы из базы данных, но когда я возвращаю пользователю список массивов оценок, массив вопросов пуст. Может ли кто-нибудь помочь мне с заполнением массива вопросов.

Примечание. Когда я делаю это Log.v("--", "Questions: " + questions.size()); из приведенного ниже кода, он дает мне размер ex. 90, но после этого, когда я это сделаю Log.v("--", "AssessmentQuestions: "+assessment.getQuestions().size()); это дает мне size: 0

Вот мой код:

public ArrayList<Assessment> getAllAsssessments() {
        ArrayList<Assessment> assessments = new ArrayList<Assessment>();
        Assessment assessment;
        String selectQuery = "SELECT * FROM " + TSCYC;
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                int AssessmentID = cursor.getInt(0);
                int childID = cursor.getInt(1);
                int doctorID = cursor.getInt(2);
                String assessmentDate = cursor.getString(3);
                Log.v("--", assessmentDate);
                ArrayList<Question> questions = new ArrayList<Question>();
                Question q;
                assessment = new Assessment(AssessmentID, assessmentDate,
                        doctorID, childID, questions);
                for (int i = 0; i < 90; i++) {
                    q = new Question("i", (i + 1));
                    q.setAnswer(cursor.getInt(i + 4));
                    questions.add(q);
                }
                Log.v("--", "Questions: " + questions.size());
                assessment = new Assessment(AssessmentID, assessmentDate,
                        doctorID, childID, questions);
                assessments.add(assessment);
                Log.v("--", "AssessmentQuestions: "
                        + assessment.getQuestions().size());
            } while (cursor.moveToNext());

        }
        return assessments;
    }

Класс Assessmen:

import java.io.Serializable;
import java.util.ArrayList;

public class Assessment implements Serializable {

    private static final long serialVersionUID = 1288566422025895376L;
    private String date;
    private int doctorID, childID, id;
    private ArrayList<Question> questions;

    public Assessment(int id, String date, int doctorID, int childID,
            ArrayList<Question> questions) {
        questions = new ArrayList<Question>();
        this.id = id;
        this.setDate(date);
        this.setDoctorID(doctorID);
        this.setChildID(childID);
        this.setQuestions(questions);

    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public int getDoctorID() {
        return doctorID;
    }

    public void setDoctorID(int doctorID) {
        this.doctorID = doctorID;
    }

    public int getChildID() {
        return childID;
    }

    public void setChildID(int childID) {
        this.childID = childID;
    }

    public ArrayList<Question> getQuestions() {
        return questions;
    }

    public void setQuestions(ArrayList<Question> questions) {
        this.questions = questions;
    }

}

Класс Вопрос:

public class Question implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 8703113563916355470L;
    private String question;
    private int answer, position;

    public Question(String question, int position) {
        answer = -1;
        this.question = question;
        this.position = position;
    }

    public int getAnswer() {
        return answer;
    }

    public void setAnswer(int answer) {
        this.answer = answer;
    }

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }
}
0
Darko Petkovski 31 Авг 2013 в 22:27
1
Как выглядит ваш конструктор оценки? уверен, что там все в порядке?
 – 
pumpkee
31 Авг 2013 в 22:33
Действительно, есть ли у вас что-нибудь с new в оценках, я чувствую, что это будет проблемой. Вне зависимости от того, что нам нужна полная (короткая) программа для работы с
 – 
Richard Tingle
31 Авг 2013 в 22:35
Можешь объяснить мне больше в ответе?
 – 
Darko Petkovski
31 Авг 2013 в 22:38
Нам понадобится как минимум код для класса Assessment. Я знаю, что у этого есть интеграция с базой данных, поэтому создать автономный пример сложно, но у нас просто недостаточно для работы здесь.
 – 
Richard Tingle
31 Авг 2013 в 22:42
Обновлен код и добавлены запрошенные классы
 – 
Darko Petkovski
31 Авг 2013 в 22:45

1 ответ

Лучший ответ

В своем конструкторе вы не скопировали ссылку на список массива вопросов, вы создали новый ArrayList, см. Отмеченную точку в приведенном ниже коде:

public Assessment(int id, String date, int doctorID, int childID,
        ArrayList<Question> questions) {
    questions = new ArrayList<Question>(); //<-- here you make a NEW empty ArrayList
    this.id = id;
    this.setDate(date);
    this.setDoctorID(doctorID);
    this.setChildID(childID);
    this.setQuestions(questions); //<-- here you setQuestions as the empty arraylist

}

Что вы пытаетесь сделать со строкой questions = new ArrayList<Question>();, насколько я понимаю, ее можно просто опустить.

2
Richard Tingle 31 Авг 2013 в 22:51
Сколько раз я был сбит с толку из-за старого отладочного кода. Рад, что смог помочь!
 – 
Richard Tingle
31 Авг 2013 в 22:55