XML 将 XML 解析为 Android 时未显示输出

XML output is not showing when parsing XML to Android

我想将 XML 解析为我的 Android 应用程序。我试过一个教程。在这里它使用 DOMParser。应用程序中没有错误。但它没有显示 XML 输出。请帮我解决这个问题。这是我到目前为止尝试过的。

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    LinearLayout layout = new LinearLayout(this);



    TextView name[];
    TextView website[];
    TextView category[];

    try {

        URL url = new URL(
                "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(url.openStream()));
        doc.getDocumentElement().normalize();

        NodeList nodeList = doc.getElementsByTagName("item");


        name = new TextView[nodeList.getLength()];
        website = new TextView[nodeList.getLength()];
        category = new TextView[nodeList.getLength()];

        for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            name[i] = new TextView(this);
            website[i] = new TextView(this);
            category[i] = new TextView(this);

            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("name");
            Element nameElement = (Element) nameList.item(0);
            nameList = nameElement.getChildNodes();
            name[i].setText("Name = "
                    + ((Node) nameList.item(0)).getNodeValue());

            NodeList websiteList = fstElmnt.getElementsByTagName("website");
            Element websiteElement = (Element) websiteList.item(0);
            websiteList = websiteElement.getChildNodes();
            website[i].setText("Website = "
                    + ((Node) websiteList.item(0)).getNodeValue());

            category[i].setText("Website Category = "
                    + websiteElement.getAttribute("category"));

            layout.addView(name[i]);
            layout.addView(website[i]);
            layout.addView(category[i]);

        }
    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }


    setContentView(layout);


}

您不能在 UI/Main 线程上执行网络或长 运行 任务,因此您需要使用 AsyncTask 在后台线程中执行该任务。尝试在 AsyncTask 中从 url 加载 xml,然后在 UI 线程中将 xml 加载到布局中。

public class XMLParsingDOMExample extends Activity {

    LinearLayout layout;
    TextView name[];
    TextView website[];
    TextView category[];

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        loadXML("http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");
    }


    private void loadXML(final String stringUrl){
        new AsyncTask<Void,Void,Document>(){
            @Override
            protected Document doInBackground(Void... params) {
                try {
                    URL url = new URL(stringUrl);
                    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                    DocumentBuilder db = dbf.newDocumentBuilder();
                    return db.parse(new InputSource(url.openStream()));
                }catch (Throwable e){
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(Document document) {
                super.onPostExecute(document);
                parseXML(document);
            }
        }.execute();
    }

    private void parseXML(Document doc){

        try {
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("item");

            name = new TextView[nodeList.getLength()];
            website = new TextView[nodeList.getLength()];
            category = new TextView[nodeList.getLength()];

            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);

                name[i] = new TextView(this);
                website[i] = new TextView(this);
                category[i] = new TextView(this);

                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("name");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();
                name[i].setText("Name = "
                        + ((Node) nameList.item(0)).getNodeValue());

                NodeList websiteList = fstElmnt.getElementsByTagName("website");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = websiteElement.getChildNodes();
                website[i].setText("Website = "
                        + ((Node) websiteList.item(0)).getNodeValue());

                category[i].setText("Website Category = "
                        + websiteElement.getAttribute("category"));

                layout.addView(name[i]);
                layout.addView(website[i]);
                layout.addView(category[i]);
            }

        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }
        setContentView(layout);
    }
}