Reputation: 43
I want to read a XML document from a URL:
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();
}
I get an Error Exception
android.os.NetworkOnMainThreadException
I added uses-permission in manifest file:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Upvotes: 2
Views: 2125
Reputation: 421
there are two step for read data from server...
1.Make a HTTP request to get the data from the webservice 2.Parse a XML document and read the contents
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);
}
Upvotes: 2
Reputation: 11337
Why you don't google or look for the error here on stackoverflow? It's full of answers...
You have to extend an AsyncTask to avoid the blocking of the GUI and do this kind of operation (as downloading or parsing stuff) in background.
Upvotes: 0