Java 从自定义对象的ArrayList访问方法

Java 从自定义对象的ArrayList访问方法,java,android,arraylist,Java,Android,Arraylist,我有一个问题,我认为这是一个概念错误 我创建了一个java类,当调用构造函数时,会创建另一个自定义对象 第一次使用param start==true运行代码,并且 questions = new ArrayList<Question>(); questions.add(this.question); 问题在于,当代码到达时,调用writexml方法并将arraylist作为参数发送给 for( Question q : questions ){

我有一个问题,我认为这是一个概念错误

我创建了一个java类,当调用构造函数时,会创建另一个自定义对象

第一次使用param start==true运行代码,并且

questions  = new ArrayList<Question>();
            questions.add(this.question);
问题在于,当代码到达时,调用writexml方法并将arraylist作为参数发送给

 for( Question q : questions ){


                serializer.startTag(null, "question");
                serializer.attribute(null,"grupo" , q.getGroup());
                serializer.attribute(null,"question" , q.getQuestion());
                serializer.text(q.getAnswer());
                serializer.endTag(null, "question");
            }
当代码尝试执行serializer.attribute(null,“grupo”,q.getGroup())时;q、 getGroup()失败,并转到捕获包含空消息的异常

我会做错什么

非常感谢

这是完整的课程

package...
inports...

class AsyncLoadXML extends AsyncTask<Boolean, Integer, String> {

    private Context ctx;    
    private List<Question> questions;
    private Question question;
    String TAG;

    public AsyncLoadXML(Context c, String g, String p, String r) {
        this.ctx = c;
        question =new Question();
        question.setGroup(g);
        question.setQuestion(p);
        question.setAnswer(r);

    }

    @Override
    protected String doInBackground(Boolean... start) {

        if(!start[0]){
            try { questions = readXML(ctx);
            } 
            catch (IOException e) { e.printStackTrace(); }
        }

        else {questions  = new ArrayList<Question>();
        questions.add(this.question);
        }

        try { writeXML(ctx, questions); } 
        catch (IOException e) { e.printStackTrace(); }


        return "done";
    }
    protected void onPostExecute(String result) {
        if(!result.equals("")) 
            Toast.makeText(this.ctx, result, Toast.LENGTH_LONG).show();
    }



    public String writeXML(Context ctx, List<Question> questions) throws IOException{   
        FileOutputStream fout = null;

        try {
            fout = ctx.openFileOutput("answers.xml", Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            return e.getMessage();

        }

        XmlSerializer serializer = Xml.newSerializer();
        try {
            serializer.setOutput(fout, "UTF-8");
            serializer.startDocument(null, true);
            serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

            serializer.startTag(null, "questions");


            for( Question q : questions ){


                serializer.startTag(null, "question");
                serializer.attribute(null,"grupo" , q.getGroup());
                serializer.attribute(null,"question" , q.getQuestion());
                serializer.text(q.getAnswer());
                serializer.endTag(null, "question");
            }

            serializer.endTag(null, "questions");


            serializer.endDocument();
            serializer.flush();
            fout.close();
            return "done";

        } catch (Exception e) {
            return e.getMessage();

        }
    }





    public List<Question> readXML(Context ctx) throws IOException{  
        FileInputStream fin = null;
        questions= new ArrayList<Question>();
        try {
            fin = ctx.openFileInput("answers.xml");
        } catch (Exception e) {

        }

        XmlPullParser parser = Xml.newPullParser();
        try {
            parser.setInput(fin, "UTF-8");

            int event = parser.next();
            while(event != XmlPullParser.END_DOCUMENT) {

                if(event == XmlPullParser.START_TAG) {


                    question = new Question();

                    for(int i = 0; i < parser.getAttributeCount(); i++) {

                        if(parser.getAttributeName(i) == "group") question.setGroup(parser.getAttributeValue(i));
                        else if(parser.getAttributeName(i) == "question") question.setQuestion(parser.getAttributeValue(i));

                    }

                }

                if(event == XmlPullParser.TEXT && parser.getText().trim().length() != 0)
                {question.setAnswer(parser.getText());

                questions.add(question);
                }


                if((event == XmlPullParser.END_TAG))
                {
                    Log.d(TAG, "</"+ parser.getName() + ">");}


                event = parser.next();
            }
            fin.close();


        } catch (Exception e) {

            e.printStackTrace();
        }
        return questions;
    }

}

请发布错误和stacktrace以及类问题的代码检查此-。然后检查您的
readXML
方法。@RohitJain比较字符串时,应按照您的建议使用
equals
,而不是使用
=
运算符。这就是说,这看起来与他得到的异常情况无关。没有关于他得到什么例外的信息。虽然我同意字符串比较可能不是这里真正的问题。@RohitJain是的。他提供的唯一信息是从
serializer.attribute(null,“grupo”,q.getGroup())抛出异常
package...
inports...

class AsyncLoadXML extends AsyncTask<Boolean, Integer, String> {

    private Context ctx;    
    private List<Question> questions;
    private Question question;
    String TAG;

    public AsyncLoadXML(Context c, String g, String p, String r) {
        this.ctx = c;
        question =new Question();
        question.setGroup(g);
        question.setQuestion(p);
        question.setAnswer(r);

    }

    @Override
    protected String doInBackground(Boolean... start) {

        if(!start[0]){
            try { questions = readXML(ctx);
            } 
            catch (IOException e) { e.printStackTrace(); }
        }

        else {questions  = new ArrayList<Question>();
        questions.add(this.question);
        }

        try { writeXML(ctx, questions); } 
        catch (IOException e) { e.printStackTrace(); }


        return "done";
    }
    protected void onPostExecute(String result) {
        if(!result.equals("")) 
            Toast.makeText(this.ctx, result, Toast.LENGTH_LONG).show();
    }



    public String writeXML(Context ctx, List<Question> questions) throws IOException{   
        FileOutputStream fout = null;

        try {
            fout = ctx.openFileOutput("answers.xml", Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            return e.getMessage();

        }

        XmlSerializer serializer = Xml.newSerializer();
        try {
            serializer.setOutput(fout, "UTF-8");
            serializer.startDocument(null, true);
            serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

            serializer.startTag(null, "questions");


            for( Question q : questions ){


                serializer.startTag(null, "question");
                serializer.attribute(null,"grupo" , q.getGroup());
                serializer.attribute(null,"question" , q.getQuestion());
                serializer.text(q.getAnswer());
                serializer.endTag(null, "question");
            }

            serializer.endTag(null, "questions");


            serializer.endDocument();
            serializer.flush();
            fout.close();
            return "done";

        } catch (Exception e) {
            return e.getMessage();

        }
    }





    public List<Question> readXML(Context ctx) throws IOException{  
        FileInputStream fin = null;
        questions= new ArrayList<Question>();
        try {
            fin = ctx.openFileInput("answers.xml");
        } catch (Exception e) {

        }

        XmlPullParser parser = Xml.newPullParser();
        try {
            parser.setInput(fin, "UTF-8");

            int event = parser.next();
            while(event != XmlPullParser.END_DOCUMENT) {

                if(event == XmlPullParser.START_TAG) {


                    question = new Question();

                    for(int i = 0; i < parser.getAttributeCount(); i++) {

                        if(parser.getAttributeName(i) == "group") question.setGroup(parser.getAttributeValue(i));
                        else if(parser.getAttributeName(i) == "question") question.setQuestion(parser.getAttributeValue(i));

                    }

                }

                if(event == XmlPullParser.TEXT && parser.getText().trim().length() != 0)
                {question.setAnswer(parser.getText());

                questions.add(question);
                }


                if((event == XmlPullParser.END_TAG))
                {
                    Log.d(TAG, "</"+ parser.getName() + ">");}


                event = parser.next();
            }
            fin.close();


        } catch (Exception e) {

            e.printStackTrace();
        }
        return questions;
    }

}
public class Question {

    private String group;
    private String question;
    private String answer;


    public Question(){

    }
    public Question(String g, String p, String r){
    group = g;
    question = p;
    answer = r;
    }

    public String getGroup(){
        return group;
    }

    public String getQuestion(){
        return question;
    }

    public String getAnswer(){
        return answer;
    }

    public void setGroup(String g){
        group = g;
    }

    public void setQuestion(String p){
        question = p;
    }

    public void setAnswer(String r){
        answer = r;
    }
}