2014-10-06 84 views
0

我在解析和显示来自非常简单的xml文件的信息时遇到了问题。Android - 将XML解析为ArrayList

首先,我将XML文件存储在res/xml文件夹中。在文件夹我有一个XML文件名为jokes.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和获得一个随机之一显示。我的代码如下:

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; 
     } 

的主要思想是跨越使用下一个()方法文档推进解析器。