我想使用 Dom Parser解析一个特定的 xml 文件。我正在我的应用程序中为文章使用 xml 解析器。如何对图像使用 xml 解析器?
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://........");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
final NodeList nodeList = doc.getElementsByTagName("Article");
/** Assign textview array lenght by arraylist size */
nasional.this.runOnUiThread(new Runnable() {
public void run() {
for (int i = 0; i < nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
nameList = fstElmnt.getElementsByTagName("Headline");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
datelist = fstElmnt.getElementsByTagName("ArticleDate");
Element dateElement = (Element) datelist.item(0);
datelist = dateElement.getChildNodes();
imglist = fstElmnt.getElementsByTagName("ImageURL");
Element imgElement = (Element) imglist.item(0);
imglist = imgElement.getChildNodes();
View root = inflater.inflate(R.layout.list_item, null);
TextView title = (TextView) root.findViewById(R.id.title);
title.setText(((Node) nameList.item(0)).getNodeValue());
TextView date = (TextView) root.findViewById(R.id.date);
date.setText(((Node) datelist.item(0)).getNodeValue());
ImageView image = (ImageView) root.findViewById(R.id.list_image);
image(((Node) imglist.item(0)).getNodeValue());
list.addView(root);
}
}
});
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
}
}).run();
}
目前尚不清楚您的问题是什么,但我怀疑您的线程在调用 UI 元素时崩溃。只能从 UI 线程修改 UI。有多种方法可以执行此操作,但请记住您希望何时以及如何分析 XML。
如果要解析一次并将结果保留在内存中,应考虑使用:
- 加载器,通过
onLoaderFinished()
传递结果 - 服务,其中结果通过广播接收器中的意图传递
如果您不介意每次轮换设备或重新创建活动时重新分析 XML,则可以考虑使用:
- 一个 AsyncTask,其中结果通过
onPostExecute()
传递 - 一个线程,其中结果通过处理程序传递