android.os.NetworkOnMainThreadException


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 이런에러가 나옵니다. 어떻게 고쳐야할까요?

  • 2016년 03월 01일에 작성됨

조회수 212


1 답변


좋아요
0
싫어요
채택취소하기

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"/> 꼭해주세요.

  • 2016년 03월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close