我想从URL:
中读取XML文档public void DownloadXmlFile() throws IOException{
//TODO
String url = "http://api.m1858.com/coursebook.xml";
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
}
我收到错误异常
android.os.NetworkOnMainThreadException
我在清单文件中添加了使用权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 0 :(得分:2)
这不是XML问题,而是严格的模式问题。 你不应该在Gui Thread中做一些时间紧张的事情,在一个自己的线程中做。
但是,你可以禁用它,但你应该;) see here
答案 1 :(得分:2)
从服务器读取数据有两个步骤......
1.发出HTTP请求以从Web服务获取数据 2.解析XML文档并阅读内容
try
{
URL url = new URL("http://www.w3schools.com/xml/note.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("note");
/** Assign textview array lenght by arraylist size */
to = new TextView[nodeList.getLength()];
from = new TextView[nodeList.getLength()];
heading = new TextView[nodeList.getLength()];
body = new TextView[nodeList.getLength()];
for (int i = 0; i < nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
to[i] = new TextView(this);
from[i] = new TextView(this);
body[i] = new TextView(this);
heading[i] = new TextView(this);
Element fstElmnt = (Element) node;
NodeList toList = fstElmnt.getElementsByTagName("to");
Element nameElement = (Element) toList.item(0);
toList = nameElement.getChildNodes();
to[i].setText("To = "+ ((Node) toList.item(0)).getNodeValue());
NodeList fromList = fstElmnt.getElementsByTagName("from");
Element fromElement = (Element) fromList.item(0);
fromList = fromElement.getChildNodes();
from[i].setText("from = "+ ((Node) fromList.item(0)).getNodeValue());
NodeList headingList = fstElmnt.getElementsByTagName("heading");
Element headingElement = (Element) headingList.item(0);
headingList = headingElement.getChildNodes();
heading[i].setText("heading = "+ ((Node) headingList.item(0)).getNodeValue());
NodeList bodyList = fstElmnt.getElementsByTagName("body");
Element bodyElement = (Element) bodyList.item(0);
bodyList = bodyElement.getChildNodes();
body[i].setText("body = "+ ((Node) bodyList.item(0)).getNodeValue());
layout.addView(to[i]);
layout.addView(from[i]);
layout.addView(heading[i]);
layout.addView(body[i]);
}
}
catch (Exception e)
{
System.out.println("XML Pasing Excpetion = " + e);
}
答案 2 :(得分:0)
为什么你不google或在stackoverflow上查找错误?它充满了答案......
您必须扩展AsyncTask以避免阻止GUI并在后台执行此类操作(如下载或解析内容)。