参考文档:http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception
android4.0以上在主线程中限制进行网络访问,否则就报这个错误。
建议:
- Do not use strictMode (only on debug mode)
- Do not change SDK version
- Do not use separate thread
use Service or AsyncTask
需要注意的是android service分为local service和remote service。local service,如果不建立worker thread,仍然是在你的应用进程的主线程即UI线程里运行。
解决方法:
Run your code in AsyncTask
:
class RetrieveFeedTask extends AsyncTask<String, Void, RSSFeed> {
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;
}
}
protected void onPostExecute(RSSFeed feed) {
// TODO: check this.exception
// TODO: do something with the feed
}
}
execute the task:
new RetrieveFeedTask().execute(urlToRssFeed);