android.os.NetworkOnMainThreadException-XML解析

android.os.NetworkOnMainThreadException-XML解析,android,xml,parsing,asynchronous,Android,Xml,Parsing,Asynchronous,我现在正在做一个项目,我的XMLParser.java使应用程序在Android 4.0或更高版本的设备上运行。 我知道我应该实现异步,但我不知道如何实现。 有人能帮我吗? 以下是XMLParser.java的代码: import *stuff public class XMLParser { public XMLParser() { } public String getXmlFromUrl(String url) { String xml

我现在正在做一个项目,我的XMLParser.java使应用程序在Android 4.0或更高版本的设备上运行。 我知道我应该实现异步,但我不知道如何实现。 有人能帮我吗? 以下是XMLParser.java的代码:

import *stuff


public class XMLParser {

    public XMLParser() {

    }


    public String getXmlFromUrl(String url) {
        String xml = null;

        try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpPost = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
        e.printStackTrace();
        } catch (IOException e) {
        e.printStackTrace();
        }
    // return XML
    return xml;
    }

    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();

            InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is); 

            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }

            return doc;
        }

     public final String getElementValue( Node elem ) {
         Node child;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( child = elem.getFirstChild(); child != null; child =      child.getNextSibling() ){
                     if( child.getNodeType() == Node.TEXT_NODE  ){
                         return child.getNodeValue();
                     }
                 }
             }
         }
         return "";
     }

     public String getValue(Element item, String str) {     
            NodeList n = item.getElementsByTagName(str);        
            return this.getElementValue(n.item(0));
        }
}
您可以使用该库执行您尝试执行的所有操作(无任何错误):


您在使用异步任务方面是如何失败的?您尝试了什么?在这个示例中,我得到一个名为url的字符串,并返回一个名为xml的字符串。通过使用AsyncTask,我无法将某些内容返回到字符串。
$.ajax(new AjaxOptions(url).context(this)
                           .type("GET")
                           .dataType("XML")
                           .success(new Function() {
                               @Override
                               public void invoke($ droidQuery, Object... params) {
                                   Document xml = (Document) params[0];
                                   //TODO parse XML Document
                               }
                           })
                           .error(new Function() {
                               @Override
                               public void invoke($ droidQuery, Object... params) {
                                   droidQuery.alert("ERROR: " + (String) params[2]);
                               }
                           }));