Android - 将 XML 解析为 ArrayList

标签 android android-activity

我在解析和显示来自一个非常简单的 xml 文件的信息时遇到问题。

首先,我将 xml 文件存储在 res/xml 文件夹中。在我的文件夹中有一个名为 jokes.xml 的 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>

我想解析这个文件,将所有笑话存储到一个数组列表中,然后随机显示一个笑话。我的代码如下:

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

}

}

问题是我只得到一个空白页。知道我做错了什么吗?

提前致谢, 克劳迪奥

最佳答案

你可以像这样解析你的笑话项目:

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

主要思想是使用 next() 方法在整个文档中推进解析器。

关于Android - 将 XML 解析为 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225041/

相关文章:

安卓开发: hook shortcut on keyboard when phone app activity is focused

java - java eclipse 中的 Activity 之间切换

android - 在我的 android 应用程序中显示 PDF 文件

android - 将数据发送到另一个可能启动的 Activity

android - 如何缓存已解析的 JSON 以供离线使用

android - 模拟触摸另一个应用程序的 Activity

android - 完成两项 Activity 并接收相同的广播

android - 从 Actionbar 中删除设置菜单 inflator

android - 编辑文本 : Avoid getting focus on setText()

android - 相机 Intent 不保存照片