0

我想使用 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();
}
4

1 回答 1

0

目前尚不清楚您的问题到底是什么,但我怀疑您的线程在调用 UI 元素时崩溃了。您只能从 UI 线程修改 UI。有多种方法可以做到这一点,但请记住您希望何时以及如何解析 XML。

如果您想解析一次并将结果保留在内存中,您应该考虑使用:

  • 加载器,结果通过onLoaderFinished()
  • 服务,结果通过 BroadcastReceiver 中的 Intent 传递

如果您不介意每次旋转设备或重新创建活动时重新解析 XML,您可以考虑使用:

  • 一个 AsyncTask,结果通过onPostExecute()
  • 一个线程,结果通过一个处理程序传递
于 2014-01-02T16:52:02.897 回答