【问题标题】:android.os.NetworkOnMainThreadException - XML Parsing [duplicate]android.os.NetworkOnMainThreadException - XML解析[重复]
【发布时间】:2013-07-17 13:25:44
【问题描述】:

我现在正在处理一个项目,我的 XMLParser.java 使应用程序强制在 Android 4.0 或更高版本的设备上关闭。 我知道我应该实现 Async 但我不知道如何实现。 有人可以帮助我吗? 这是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));
        }
}

【问题讨论】:

  • 您在使用 AsyncTask 时遇到了什么问题?你试过什么?
  • 好吧,在这个例子中,我得到一个名为 url 的字符串并返回一个名为 xml 的字符串。通过使用 AsyncTask,我无法将某些内容返回到字符串。

标签: android xml parsing asynchronous


【解决方案1】:

您可以使用droidQuery 库来执行您尝试执行的所有操作(没有任何错误):

$.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]);
                               }
                           }));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多