怎么修复android.os.NetworkOnMainThreadException

我在为 RssReader 运行Android 项目时出了一个error。
代码如下:
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 中运行代码:

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"/>

我用一个新的 Thread解决了这个问题。

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        try  {
            //Your code goes here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }});
thread.start();