android.os.NetworkOnMainThreadException
조회수 1572회
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();
이 코드를 실행시키는데
android.os.NetworkOnMainThreadException 이런에러가 나옵니다. 어떻게 고쳐야할까요?
1 답변
-
android.os.NetworkOnMainThreadException이 에러는 애플리케이션이 메인쓰레드에서 네트워크 연산을 시도하면 발생하는데요. 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 } }
이렇게해보세요. 실행은
new RetrieveFeedTask().execute(urlToRssFeed);
이렇게하면됩니다.그리고 안드로이드매니페스트에서
<uses-permission android:name="android.permission.INTERNET"/>
꼭해주세요.
댓글 입력