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
この問題を解決するにはどうすればいいでしょうか?
ベストアンサー1
注意: AsyncTask は API レベル 30 で非推奨になりました。
AsyncTask | Android 開発者
この例外は、アプリケーションがメインスレッドでネットワーク操作を実行しようとしたときにスローされます。コードを実行するには、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;
} 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"/>