Saturday, 7 October 2017

java - How to fix 'android.os.NetworkOnMainThreadException'?



I got an error while running my Android project for RssReader.



Code:



URL url = new URL(urlToRssFeed);

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();



And it shows the below error:



android.os.NetworkOnMainThreadException


How can I fix this issue?


Answer



This exception is thrown when an application attempts to perform a networking operation on its main thread. Run your code in AsyncTask:



class RetrieveFeedTask extends AsyncTask {


private Exception exception;

protected RSSFeed doInBackground(String... urls) {
try {
URL url = new URL(urls[0]);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();

xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);

return theRSSHandler.getFeed();
} catch (Exception e) {
this.exception = e;

return null;
} finally {

is.close();
}
}

protected void onPostExecute(RSSFeed feed) {
// TODO: check this.exception
// TODO: do something with the feed
}
}



How to execute the task:



In MainActivity.java file you can add this line within your oncreate() method



new RetrieveFeedTask().execute(urlToRssFeed);


Don't forget to add this to AndroidManifest.xml file:






No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...