当前位置: 首页 > 面试题库 >

如何修复'android.os.NetworkOnMainThreadException'?

姜淇
2023-03-14
问题内容

运行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以下位置运行代码:

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


 类似资料:
  • 问题内容: 应用程序通过使用jsf形式读取参数来发送字母。我不明白为什么以及如何解决它,因为当您在开发环境中运行时,一切正常。当我将应用程序放置在VPS服务器上时,会出现下一个错误堆栈(尽管该应用程序可以根据需要在本地主机上运行): 问题答案: 我创建并编译使用版本jdk_8u151和JRE的项目。那时,就像在服务器上一样,项目是在后来的jre下启动的。使用相同版本的jre解决了该问题。泰

  • 运行Java程序时,我收到一个错误。出了什么问题,我该怎么修复它?

  • 我正在将UTC时间转换为本地时间,但遇到错误:

  • 当我试图解析企业管理器中的wsdl时,我们得到了以下错误。我该怎么解决这个问题。 无法分析WSDL文档。分析WSDL位置-WSDLException时发生以下错误:faultCode=PARSER\u错误:无法读取位于“https:/xxx?WSDL”的WSDL文件,原因是:javax。网ssl。SSLHandshakeException.:javax。网ssl。SSLHandshakeExcep

  • 问题内容: 昨晚我们(显然)对Solaris MySQL数据库引擎的执行不佳。至少某些InnoDB表已损坏,其中事务日志中的时间戳无序错误,以及有关索引的特定错误。 我们知道可用于MyISAM表修复的工具,但无法为InnoDB找到任何东西。 旁注:尝试优化表(以尝试重建损坏的索引)会导致数据库服务器崩溃。 问题答案: 首先, 停止服务器并对光盘进行映像 。仅此而已是没有意义的。然后在这里看看。

  • 问题内容: 运行Java程序时出现错误。有什么问题,我该如何解决? 问题答案: 没有更多的信息,很难找出问题所在,但根本原因是,您可能是针对缺少该方法的该类的另一个版本编译了一个类,而不是运行该类时所使用的方法。 查看堆栈跟踪…如果在库中的对象上调用方法时出现异常,则很可能在编译和运行时使用库的不同版本。确保两个地方的版本都正确。 如果在调用由类实例化对象的方法,当出现异常你做,那么你的构建过程似