首页 > Java > 如何修复错误“android.os.NetworkOnMainThreadException”?

如何修复错误“android.os.NetworkOnMainThreadException”?

上一篇 下一篇

我在为 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

如何解决此问题?

分割线

网友回答:

几乎应始终在线程上运行网络操作或作为异步任务运行。

但是,如果您愿意接受后果,则可以删除此限制并覆盖默认行为。

加:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

在你的课堂上,

在 Android 清单.xml文件中添加此权限:

<uses-permission android:name="android.permission.INTERNET"/>

后果:

您的应用将(在 Internet 连接不稳定的区域)变得无响应并锁定,用户感知到速度缓慢并必须执行强制杀伤,并且您冒着活动管理器杀死您的应用并告诉用户应用已停止的风险。

Android 有一些关于良好编程实践的好技巧,用于设计响应能力:
NetworkOnMainThreadException |安卓开发者

分割线

网友回答:

注意:AsyncTask 在 API 级别 30 中已弃用。
异步任务|安卓开发者

当应用程序尝试在其主线程上执行网络操作时,将引发此异常。在 中运行代码: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.javaoncreate()

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(); 

模板简介:该模板名称为【如何修复错误“android.os.NetworkOnMainThreadException”?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 170次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-14
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 微信文章 响应式 微信公众平台 微信模板 html5 微信图片 单页式简历模板 企业网站 微信素材
您可能会喜欢的其他模板