0

解析したいXMLファイルは

<?xml version="1.0" encoding="utf-8"?>
<items>
    <item>
        <question>Question?</question>
        <answer1>Answer 1 is fun</answer1>
        <answer2>Answer 2 is too</answer2>
        <answer3>Answer 3 is me</answer3>
        <answer4>Answer 4 no more</answer4>
        <correctanswer>Answer 1 is fun</correctanswer>
        <comment>Sent in by: Salamader Jack, I need help :(</comment>
    </item>
</items>

これまでに書いたコードは、完全にオフである場合とそうでない場合があります。このようなパーサーを書くのはこれが初めてです。いろいろな方法があると聞いたので、他にいい案があれば教えてください!:)

package assinment1.sfapps.com.myapplication;

import android.app.Activity;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.ArrayList;


class question {
    public String question;
    public String answer1;
    public String answer2;
    public String answer3;
    public String answer4;
    public String comment;
    public String correctAnswer;

}

public class TriviaGame extends Activity {
    ArrayList<question> questions;
    question q;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_trivia_game);

        TextView myXmlContent = (TextView)findViewById(R.id.tvfun);
        String stringXmlContent;
        try {
            stringXmlContent = getEventsFromAnXML(this);
            myXmlContent.setText(stringXmlContent);
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private String getEventsFromAnXML(Activity activity)
            throws XmlPullParserException, IOException
    {
        //StringBuffer stringBuffer = new StringBuffer();
        Resources res = activity.getResources();
        XmlResourceParser xpp = res.getXml(R.xml.questions_q);
        xpp.next();
        int eventType = xpp.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT)
        {
            q = new question();
            if(eventType == XmlPullParser.START_DOCUMENT || (xpp.getName() == "items" || xpp.getName() == "item" ))
            {
              //  stringBuffer.append("--- Start XML ---");
            }
            else if(eventType == XmlPullParser.START_TAG)
            {
                if(){

                }
                if(xpp.getName() == "question"){
                    q.question = xpp.getText();
                }else if(xpp.getName() ==  "answer1"){
                    q.answer1 = xpp.getText();
                }else if(xpp.getName() ==  "answer2"){
                    q.answer2 = xpp.getText();
                }else if(xpp.getName() ==  "answer3"){
                    q.answer3 = xpp.getText();
                }else if(xpp.getName() ==  "answer4"){
                    q.answer4 = xpp.getText();
                }else if(xpp.getName() ==  "comment"){
                    q.comment = xpp.getText();
                }else if(xpp.getName() ==  "correctAnswer"){
                    q.correctAnswer = xpp.getText();
                }
                questions.add(q);
               // stringBuffer.append("\nSTART_TAG: "+xpp.getName());
            }
            eventType = xpp.next();

        }

        return q.toString();
    }

    private void printQ(ArrayList<question> questions) {
        //findViewById()
    }


    @Override
public boolean onOptionsItemSelected(MenuItem item){
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id=item.getItemId();

        //noinspection SimplifiableIfStatement
        if(id==R.id.action_settings){
        return true;
        }

        return super.onOptionsItemSelected(item);
        }
}

どんな助けでも素晴らしいでしょう。私はこのコードが未完成であることを知っています..それもクラッシュします。XML から取り出した質問を、作成した配列リストに格納しようとしています。また、これが複数の質問を保存することを確認しようとしています。これを見てくれてありがとうございます(笑)。

4

2 に答える 2

0

私の場合、MyQs はグローバル配列です。
XML から質問を取得する方法 (この場合は配列に格納されます)。何も割り当てられない必要がある場合は、ArrayList を試してください。

 public void getQuestionsfromXML() throws XmlPullParserException,
            IOException {
        String tagname = " ";
        XmlResourceParser xpp = getResources().getXml(R.xml.trivia);

        if (xpp == null) {

        } else {
            xpp.next();
            int eventType = xpp.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {
                    tagname = xpp.getName();
                } else if (eventType == XmlPullParser.TEXT) {
                    setNextQuestion(tagname, xpp.getText());

                }
                eventType = xpp.next();

            }
        }
    }

 public void setNextQuestion(String tagname, String textin) {

        if (tagname.equals("question")) {
            myQs[myQsindex] = new myQuestion();
            myQs[myQsindex].Question = textin;

        }
        if (tagname.equals("answer1")) {
            myQs[myQsindex].Answer1 = textin;

        }
        if (tagname.equals("answer2")) {
            myQs[myQsindex].Answer2 = textin;

        }
        if (tagname.equals("answer3")) {
            myQs[myQsindex].Answer3 = textin;

        }
        if (tagname.equals("answer4")) {
            myQs[myQsindex].Answer4 = textin;

        }
        if (tagname.equals("correctanswer")) {
            myQs[myQsindex].correctAnswer = textin;

        }

        if (tagname.equals("comment")) {
            myQs[myQsindex].comment = textin;
            msg = "question-> " + myQs[myQsindex].Question + "\n" + "Answer:     " + myQs[myQsindex].correctAnswer + "Index: " + myQsindex;

            if (TotalNumberofQs < maxQs)// precaution here
            {
                myQsindex++;
                TotalNumberofQs++;
            }
        }

それを表示することは明らかにより多くのコードですが、基本的な考え方は
、次のコードを取得し、それを使用して必要に応じて質問を更新することです。

    private void displayQuestion() {
            //Text View
            question.setText(myQs[myQsindex].Question);

            //Text View Radio buttons
            Answer1.setText(myQs[myQsindex].Answer1);
            Answer2.setText(myQs[myQsindex].Answer2);
            Answer3.setText(myQs[myQsindex].Answer3);
            Answer4.setText(myQs[myQsindex].Answer4);
            correctAnswer = myQs[myQsindex].correctAnswer;
    }
于 2015-03-03T10:29:18.483 に答える