본문 바로가기
자바

'android.os.networkonmainthreadException'을 수정하는 방법은 무엇입니까?

by º기록 2021. 4. 10.
반응형

RSSReader 용 Android 프로젝트를 실행하는 동안 오류가 발생했습니다.

암호:

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

이 문제를 어떻게 해결할 수 있습니까?

 

해결 방법

 

참고 : ASYNCTASK은 API 레벨 30에서 더 이상 사용되지 않습니다.



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;
        } finally {
            is.close();
        }
    }

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

작업을 실행하는 방법 :

mainactivity.java 파일에서 oncreate () 메소드 에이 행을 추가 할 수 있습니다

new RetrieveFeedTask().execute(urlToRssFeed);

androidmanifest.xml 파일에 이것을 추가하는 것을 잊지 마십시오.

<uses-permission android:name="android.permission.INTERNET"/>

 

참조 페이지 https://stackoverflow.com/questions/6343166

 

 

반응형

댓글