问题描述
- 当解析 XML 时出现的错误
-
在应用程序打开之前 XMLParser 就崩溃了。错误是:org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
XMLParser 代码:
public class XMLParser { public XMLParser(){ } public String getXmlFromUrl(String url){ String xml = null; try{ DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(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; } 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)); } }
在 main activity 中是这样调用的:
XMLParser parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); Document doc = parser.getDomElement(xml);
所以问题出在哪里呢?
解决方案
添加:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
解决方案二:
LZ的网络请求返回都不用判断状态?直接就调用 HttpEntity httpEntity = httpResponse.getEntity();xml = EntityUtils.toString(httpEntity);
???
解决方案三:
你的url是否有问题?
时间: 2024-10-31 17:03:38