You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Bundle传入Float 0.0为何触发NullPointerException?

问题核心

这个空指针异常根本不是出在你存Bundle的代码里,而是接收页面用Safe Args取参数的时候。原因很明确:

  • 你加判断跳过存值后,Bundle里压根没"priceModifier"这个键
  • 但你在nav_graph里把该参数设成了非空类型,Safe Args生成的代码会强制从Bundle里拿这个值,拿不到就返回null,然后硬转成非空Float,直接触发NPE。
  • 哪怕你存了0.0转的Float,也要确认接收方的取值逻辑,但大概率问题出在跳过存值的场景。
解决办法

分两种情况处理:

  • 必须传这个参数(不管值是不是0.0)
    删掉那个多余的判断,直接把参数存进Bundle就行。0.0是合法的非空值,存完接收方就能正常拿到:

    mBundle.apply {
        putFloat("priceModifier", mPriceModifier.toFloat())
    }
    mNavController.navigate(R.id.action_global_processState, mBundle)
    

    这里放心,mPriceModifier.toFloat()不会返回null,因为mPriceModifier是非空Double,转Float完全安全。

  • 业务允许参数为空
    去nav_graph里把这个参数改成可空类型(勾选Nullable选项),然后接收方用可空Float类型接收,处理好null的情况就行。

额外要查的点
  • 看看接收页面是不是用Safe Args生成的类取参数,别直接用Bundle.getFloat()——后者没找到键会返回0.0f,不会抛异常,但Safe Args的非空参数就会炸。
  • 确认mBundle是不是新创建的实例,有没有被其他代码改过导致参数丢失。

内容的提问来源于stack exchange,提问作者Spectator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:40:02