There is such an XML file
<?xml version="1.0" encoding="utf-8"?> <quiz> <question title="Question ONE"> <answer_one title="First answer">true</answer_one> <answer_two title="Second answer">false</answer_two> <answer_three title="Third answer">false</answer_three> <answer_four title="Fourth answer">false</answer_four> </question> <question title="Question TWO"> <answer_one title="First answer">false</answer_one> <answer_two title="Second answer">true</answer_two> <answer_three title="Third answer">false</answer_three> <answer_four title="Fourth answer">false</answer_four> </question> <question title="Question THREE"> <answer_one title="First answer">false</answer_one> <answer_two title="Second answer">false</answer_two> <answer_three title="Third answer">false</answer_three> <answer_four title="Fourth answer">true</answer_four> </question> <question title="Question FOUR"> <answer_one title="First answer">false</answer_one> <answer_two title="Second answer">true</answer_two> <answer_three title="Third answer">false</answer_three> <answer_four title="Fourth answer">false</answer_four> </question> <question title="Question FIVE"> <answer_one title="First answer">false</answer_one> <answer_two title="Second answer">true</answer_two> <answer_three title="Third answer">false</answer_three> <answer_four title="Fourth answer">false</answer_four> </question> </quiz>
Task parse it using XMLPullParser
and write to ArrayList
(for a start). MainActivity
code
package com.example.lexzcq.eyewsefs; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { final static String TAG = "log"; private ArrayList<TrueFalse> mQuestionBank = new ArrayList<> (); @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); getQuestionsFromXML (); for (int i = 0; i < mQuestionBank.size (); i++) { Log.i (TAG, "Question: " + mQuestionBank.get (i).getQuestion () + "\n"); Log.i (TAG, "TEXT Answer ONE: " + mQuestionBank.get (i).getFirstAnswer ().getAnswerText () + "\n"); Log.i (TAG, "STATE Anser One:" + mQuestionBank.get (i).getFirstAnswer ().getState () + "\n"); Log.i (TAG, "TEXT Answer TWO: " + mQuestionBank.get (i).getSecondAnswer ().getAnswerText () + "\n"); Log.i (TAG, "STATE Anser TWO:" + mQuestionBank.get (i).getSecondAnswer ().getState () + "\n"); Log.i (TAG, "TEXT Answer THREE: " + mQuestionBank.get (i).getThirdAnswer ().getAnswerText () + "\n"); Log.i (TAG, "STATE Anser THREE:" + mQuestionBank.get (i).getThirdAnswer ().getState () + "\n"); Log.i (TAG, "TEXT Answer FOUR: " + mQuestionBank.get (i).getFourthAnswer ().getAnswerText () + "\n"); Log.i (TAG, "STATE Anser FOUR:" + mQuestionBank.get (i).getFourthAnswer ().getState () + "\n"); } } private void getQuestionsFromXML () { XmlPullParser parser = getResources ().getXml (R.xml.questions); String question = ""; TrueFalse item; String title = ""; boolean state; Answer answerOne = null; Answer answerTwo = null; Answer answerThree = null; Answer answerFour = null; try { while (parser.getEventType () != parser.END_DOCUMENT) { if (parser.getEventType () == parser.START_TAG && parser.getName ().equals ("question")) { question = parser.getAttributeValue (null, "title"); while (parser.getEventType () != parser.END_TAG) { title = parser.getAttributeValue (null, "title").toString (); if (parser.getEventType () == parser.START_TAG && parser.getName ().equals ("answer_one")) { if (parser.getText ().toString ().equals ("true")) { state = true; } else { state = false; } answerOne = new Answer (title, state); } if (parser.getEventType () == parser.START_TAG && parser.getName ().equals ("answer_two")) { title = parser.getAttributeValue (null, "title").toString (); if (parser.getText ().equalsIgnoreCase ("true")) { state = true; } else { state = false; } answerTwo = new Answer (title, state); } if (parser.getEventType () == parser.START_TAG && parser.getName ().equals ("answer_three")) { title = parser.getAttributeValue (null, "title").toString (); if (parser.getText ().equalsIgnoreCase ("true")) { state = true; } else { state = false; } answerThree = new Answer (title, state); } if (parser.getEventType () == parser.START_TAG && parser.getName ().equals ("answer_four")) { title = parser.getAttributeValue (null, "title").toString (); if (parser.getText ().equalsIgnoreCase ("true")) { state = true; } else { state = false; } answerFour = new Answer (title, state); } parser.next (); } item = new TrueFalse (question, answerOne, answerTwo, answerThree, answerFour); mQuestionBank.add (item); } parser.next (); } } catch (XmlPullParserException e) { e.printStackTrace (); } catch (Exception e) { e.printStackTrace (); } } }
Actually, how to go through all the tags to put their values in the ArrayList
? I simply do not display anything in the log. PS I still have 2 classes: TrueFalse
- a class with a question, answer choices and the correctness of each answer and Answer
- with a question title and correctness / incorrectness.