프로그래밍 언어/Android

오류 'android.os.NetworkOnMainThreadException'

Rateye 2021. 9. 8. 10:20
728x90
반응형
질문 : 'android.os.NetworkOnMainThreadException'을 수정하는 방법?

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에서 더 이상 사용되지 않습니다.
AsyncTask | Android 개발자

이 예외는 응용 프로그램이 기본 스레드에서 네트워킹 작업을 수행하려고 할 때 발생합니다. AsyncTask 에서 코드를 실행합니다.

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();

작업 실행 방법 :

MainActivity.java oncreate() 메소드 내에이 행을 추가 할 수 있습니다.

new RetrieveFeedTask().execute(urlToRssFeed);

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

<uses-permission android:name="android.permission.INTERNET"/>
출처 : https://stackoverflow.com/questions/6343166/how-to-fix-android-os-networkonmainthreadexception

 

728x90
반응형