2014-10-06 2 views
0

아주 간단한 xml 파일에서 정보를 파싱하고 표시하는 데 문제가 있습니다.Android - XML을 ArrayList로 구문 분석

우선 xml 파일을 res/xml 폴더에 저장합니다.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <joke>This is a good joke.</joke> 
    <joke>This is a very nice good great joke.</joke> 
    <joke>Oh Yeah!</joke> 
</resources> 

내가,이 파일을 구문 분석 ArrayList에로 모든 농담을 저장하고에 임의의 하나를 얻으려면 : 폴더에서 내가 xml 파일 이름 jokes.xml이 파일의 내용은 다음과 같다 보여 주다. 내 코드는 다음과 같습니다.

public class MainActivity extends Activity { 

private TextView texto; 
private int i = 0; 
private String[] arrayJokes; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    texto = (TextView) findViewById(R.id.textView1); 

    XmlResourceParser joke = getResources().getXml(R.xml.jokes); 

    try { 
     while(joke.getEventType() != XmlResourceParser.END_DOCUMENT){ 
      if(joke.getEventType() == XmlResourceParser.START_TAG){ 
       String s = joke.getName(); 

       if(s.equals("joke")){ 
        arrayJokes[i] = joke.getAttributeValue(null, "joke"); 
        i++; 
       } 
      } 
     } 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    //takes random id from the array 
    Random generator = new Random(); 
    int rnd = generator.nextInt(arrayJokes.length); 

    String j = arrayJokes[rnd]; 
    texto.setText(j); 

} 

} 

문제는 내가 빈 페이지 만 얻는 것입니다. 내가 뭘 잘못하고 있는거야? 사전에

감사합니다, 클라우디오

답변

1

이처럼 농담 항목을 구문 분석 할 수 있습니다 :

private ArrayList<String> parseJokes() { 
      ArrayList<String> jokes = new ArrayList<String>(); 
      XmlResourceParser parser = getResources().getXml(R.xml.jokes); 


      try { 
       int eventType=parser.getEventType(); 
       while (eventType!=XmlPullParser.END_DOCUMENT) { 
        if(eventType==XmlPullParser.START_TAG){ 
         if (parser.getName().equals("joke")) { 
          jokes.add(parser.nextText()); 
         } 
        } 

        eventType= parser.next(); 
       } 
      } catch (XmlPullParserException | IOException e) { 
       Log.e("XmlPullParserException", e.toString()); 
      } 
      parser.close(); 
      return jokes; 
     } 

주요 아이디어는 다음() 방법을 사용하여 문서를 통해 파서를 진행하는 것입니다.