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에서 더 이상 사용되지 않습니다. 작업을 실행하는 방법 : 참조 페이지 https://stackoverflow.com/questions/6343166
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"/>
'자바' 카테고리의 다른 글
java.lang.Reflect.InvocationTargetException의 원인이되는 것은 무엇입니까? (0) | 2021.04.10 |
---|---|
Java의 문자열 값에서 enum 값을 가져 오는 방법은 무엇입니까? (0) | 2021.04.10 |
배열에서 요소 제거 (Java) (0) | 2021.04.09 |
Java에서 상수를 구현하는 가장 좋은 방법은 무엇입니까? (0) | 2021.04.09 |
열거 형 값을 문자열 리터럴으로 사용합니다 (0) | 2021.04.09 |
댓글