我在解析和显示来自一个非常简单的 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/