Android 퀴즈 앱을 쓰고 있습니다. XML 파일에서 질문을로드하여 문자열에 넣은 다음 해당 문자열을 단추 텍스트로 사용하려고합니다.android에서 xml 구문 분석
XML 구문 분석에 문제가 있습니다. 나는 XmlPullParserFactory
과 XmlPullParser
을 사용합니다. XMLResourceParser
도 시도했지만 성공하지 못했습니다. 이 작업을 올바르게 수행하려면 어떻게해야합니까?
이
은 한 OnCreate에서 초기화입니다 :XmlPullParserFactory pullParserFactory;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
InputStream in_s = getApplicationContext().getAssets().open("new_anwers.xml");
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in_s, null);
loadAnswers(parser);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
이러한 기능과 도우미 클래스입니다 :
<?xml version="1.0" encoding="UTF-8"?>
<new_answers>
<answer1>
<text1>Zvonimir</text1>
<text2>Tomislav</text2>
<text3>Branimir</text3>
<text4>Viseslav</text4>
</answer1>
<answer2>
<text1>Stipe Mesic</text1>
<text2>Ivo Josipovic</text2>
<text3>Franjo Tuđman</text3>
<text4>Mate Granic</text4>
</answer2>
<answer3>
<text1>Hrvatski politicar</text1>
<text2>Hrvatski akademik</text2>
<text3>Hrvatski glazbenik</text3>
<text4>Hrvatski branitelj</text4>
</answer3>
</new_answers>
:
void loadAnswers(XmlPullParser parser) throws XmlPullParserException,IOException
{
ArrayList<Answer> answers = null;
int eventType = parser.getEventType();
Answer currAnswer = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
String name = null;
switch(eventType){
case XmlPullParser.START_DOCUMENT:
answers = new ArrayList();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if(name == "answer1") {
currAnswer = new Answer();
} else if (currAnswer != null) {
if(name == "text1") {
currAnswer.text1 = parser.nextText();
} else if(name == "text2") {
currAnswer.text2 = parser.nextText();
} else if(name == "text3") {
currAnswer.text3 = parser.nextText();
} else if(name == "text4") {
currAnswer.text4 = parser.nextText();
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("answer1") && currAnswer!= null){
answers.add(currAnswer);
}
}
eventType = parser.next();
}
setBtnTxt(answers);
}
class Answer {
String text1;
String text2;
String text3;
String text4;
}
void setBtnTxt(ArrayList<Answer> answers) {
String[] txt = new String[4];
Iterator<Answer> it = answers.iterator();
while(it.hasNext())
{
Answer currAnswer = it.next();
txt[1] = currAnswer.text1;
txt[2] = currAnswer.text2;
txt[3] = currAnswer.text3;
txt[4] = currAnswer.text4;
}
Button odgA = (Button) findViewById(R.id.button_OdgA);
Button odgB = (Button) findViewById(R.id.button_OdgB);
Button odgC = (Button) findViewById(R.id.button_OdgC);
Button odgD = (Button) findViewById(R.id.button_OdgD);
odgA.setText(txt[1]);
odgB.setText(txt[2]);
odgC.setText(txt[3]);
odgD.setText(txt[4]);
}
여기
는 응답의 XML입니다
또한 일반적으로 XML 처리는 onCreate() 메서드에서 직접 수행하지 마십시오. UI 스레드에서 실행되므로 사용자가 응용 프로그램을 응답하지 않게됩니다. 대신 별도의 스레드에서 처리를 수행하므로 AsyncTask에서 수행하십시오. – Sundeep