为 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:
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()方法中添加此行
MainActivity.java
oncreate()
new RetrieveFeedTask().execute(urlToRssFeed);
不要忘记将其添加到AndroidManifest.xml文件中:
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>