No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧

这篇具有很好参考价值的文章主要介绍了No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

情景再现

开发这么久,不知道你们是否也经历过这样的情况,测试或者用户,反馈app闪退,结果你自己打开开发工具,去调试,一切正常,然后闪退还是存在,只是在开发环境中不能重现。这种情况一般是在特定的情况下才触发的bug。比如app退出后台,再打开的时候,重启了,这样你在开发环境很难模拟到。那这种bug怎么来排查的,两种办法:

集成bugly

bugly是个很好的工具,

腾讯Bugly,为移动开发者提供专业的异常上报和运营统计,帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。

具体怎样集成自行百度。集成以后,可以查看到很多开发环境看不到的bug,这样就根据崩溃记录,对app进行完善。

bug重现

虽然bugly能看到日志,但是怎么才能重现呢,毕竟不重现,没办法解决bug,能重现的bug,其实是最好解决的Bug。对于一些bug,可能加一些判断非空就行了,但是有些bug,比较难重现,比如

No view found for id 0x7f0901c3 (包名:id/frameLayout) for fragment MergedModuleNoLoginFragment{acdaeec} (156480ac-26ef-4bdc-8ec6-ae57f092d97f id=0x7f0901c3)
包名.UI.onStart(UI.java:75)

这个bug困扰了我好久,开发环境始终重现不了,加了try-catch也不行,然后网上的方法都试了,也不行。这个bug的原因就是一句话:调用的时机不对,还没初始化完成,就切换了。这个bug一般会在fragment嵌套fragment的代码里出现。现在将解决办法说一下

开发环境重现bug

其实一些bug,正常情况下是重现不了的,我们可以通过设置开发者选项里的不保留活动,调试的时候,正常进入页面,然后点击home键,回到桌面,再点击图标,就有可能重现一些Bug
No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧,bug
我这边的bug解决,是将切换fragment的方法,放在onCreate()方法里,有可能view还没初始化,就调用了,会报错

   @Override
    protected void onStart() {
        super.onStart();
        // 加载主页面
        showMainFragment();
    }

   
 private void showMainFragment()
    {
        if (mainFragment == null && !isDestroyedCompatible())
        {
            mainFragment = new HomeFragment();
            switchFragmentContent(mainFragment);
        }
    }
    
   protected void switchFragmentContent(TFragment fragment)
    {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(fragment.getContainerId(), fragment);
        try
        {
            transaction.commitNowAllowingStateLoss();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

报错的代码是MainFragment里的子fragment切换

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        mSupportFragmentManager = getParentFragmentManager();
        mTransaction = mSupportFragmentManager.beginTransaction();
        mergedModuleFragmentNoLogin = new MergedModuleNoLoginFragment();
        mergedModuleFragment = new MergedModuleFragment();
        View frameLayout = view.findViewById(R.id.frameLayout);
        if (frameLayout != null) {
            if (!Contants.DOCTOR_LOGIN) {
                mTransaction.add(R.id.frameLayout, mergedModuleFragmentNoLogin);
            } else {
                mTransaction.add(R.id.frameLayout, mergedModuleFragment);
            }
            mTransaction.commitAllowingStateLoss();
        }


        return view;
    }

mTransaction.add(R.id.frameLayout, mergedModuleFragment);
报错,找不到R.id.frameLayout。放到了onStart()方法里就可以了

关于这个Bug,网上有一些博客,我把筛选过,感觉有用的博客分享一下
Fragment找不到资源Id引起的线上Crash
从一个线上 Android Bug 回看 Fragment
java.lang.IllegalArgumentException No view found for id 0x7
java.lang.IllegalArgumentException No view found for id 0x… for fragment
Fragment嵌套fragment出现的两种错误No view found for id for fragment 与Can not perform this action after onSave
java.lang.IllegalArgumentException: No view found for id 崩溃总结
关于No view found for id 0x7f080135 (com.xxx.xxx:id/viewpager) for fragment PopupWindow
遇到的错误之java.lang.IllegalArgumentException: No view found for id
Android之 运行时错误总结文章来源地址https://www.toymoban.com/news/detail-650293.html

到了这里,关于No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决There is no PasswordEncoder mapped for the id “null“问题

    springsecurity从4.2升级到5.0之后,做简单的登录,出现如下所示的错误: 根据官方文档的资料和网上解决办法,需要做一些修改。 默认情况下与4.2版本不同的是,springsecurity5.0密码加密方式采用了bcrypt的方式,而且密码直接配置在xml文件中,不光是需要使用BCryptPasswordEncoder来加

    2023年04月09日
    浏览(93)
  • No mapping found for HTTP request with URI

    参考: 参考地址 ssm老项目,接过来别人的项目 临时建了一个Controller方便测试用的,结果访问掉不通,报: No mapping found for HTTP request with URIxxxx 这样的错误 看了下web,xml配置 在 webmvc-config.xml 配置文件里面添加了几行配置 说明: com.iph.hiring.headcount.api.service.* 是我Controller所在的地址,

    2024年02月11日
    浏览(47)
  • 已解决ERROR: No matching distribution found for xpinyin

    已解决(pip使用阿里云镜像安装第三方模块失败)ERROR: Could not find a version that satisfies the requirement xpinyin (from versions: none) ERROR: No matching distribution found for xpinyin WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS w

    2023年04月20日
    浏览(46)
  • ERROR: No matching distribution found for gradio>=3.23

    今天运行chatGPTweb项目的时候 跟下载其他包时候一样使用清华源下载的时候,pip install gradio==3.23 -i https://pypi.python.org/pypi 然后, 报错了 。 国内的镜像源还没有更新到 gradio=3.23,所以需要科学上网,手动去pypi官网下载whl,然后通过whl下载即可。 1.从官网中下载gradio编译的pyd文

    2024年02月11日
    浏览(60)
  • No matching distribution found for torch==1.10.1+cu111

    30系显卡暂时不支持CUDA11以下版本,CUDA不支持当前显卡的算力。 解决方法1:https://blog.csdn.net/weixin_43760844/article/details/115706289 解决方法2:conda下载cudatoolkit (貌似没有解决问题, 嘿嘿, 可能只能卸载cuda了) 首先搜索安装包的版本 然后安装固定版本的cudatoolkit,我的cuda最高

    2024年02月07日
    浏览(43)
  • 已解决ERROR: No matching distribution found for gradio==3.23

    已解决stderr: ERROR: Could not find a version that satisfies the requirement gradio==3.23 ERROR: No matching distribution found for gradio==3.23 粉丝群里面的一个小伙伴遇到问题跑来私信我,想用pip安装gradio ,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记

    2023年04月18日
    浏览(45)
  • ELK报错no handler found for uri and method [PUT] 原因

    执行后提示no handler found for uri and method post,最新版8.2的问题?   原因: index.mapping.single_type: true 在索引上 设置将启用按索引的单一类型行为,该行为将在6.0后强制执行。 原 {type} 要改为 _doc,格式如下 PUT {index}/_doc/{id} 和 POST {index}/_doc

    2024年02月12日
    浏览(51)
  • 已解决No suitable driver found for jdbc:mysql://localhost:3306/ 问题

    已解决No suitable driver found for jdbc:mysql://localhost:3306/ 问题 在学习java数据库连接池使用的时候遇到问题,无法连接到数据库,查看日志是\\\"No Suitable Driver Found For Jdbc\\\",但查看数据库连接配置没问题。 这个问题可把我愁坏了,要不问一下GPT?上。 问了一下GPT,得到的答案是这样的

    2024年02月07日
    浏览(51)
  • 单元测试报错 No tests found for given includes: [StudyApplicationTests.contextLoads]

    当你运行单元测试报错No tests found for given includes: [StudyApplicationTests.contextLoads] 如下:  可能是因为你的gradle测试默认使用的是以gradle启动,改成以IDEA启动即可

    2024年02月15日
    浏览(45)
  • 【Feign请求头丢失问题】no suitable HttpMessageConverter found for response type

    省流助手 HttpMessageConverter 失败的原因是:在项目中使用了一个拦截器拦截请求,部分接口需要登陆才能访问,否则返回一个text/html格式的响应,导致远程服务解析响应失败。 登陆失败的原因是:Feign发起远程调用的时候会重新生成一个新的请求,带来的问题就是不会携带原来

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包