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

Jetpack Compose Navigation传递Float参数出现类型转换错误如何解决

问题根因

你拼接路由跳转时,${product.price} 会将Float值直接转为字符串拼入URL路径,Jetpack Compose Navigation从路径中读取参数时默认拿到的是字符串类型,即便你声明了NavType.FloatType,也不会自动完成字符串到Float的类型转换,因此触发类型转换异常。

解决方案

方案1:手动转换类型(最快修复)

取参数时先读取字符串格式的price值,再手动转为Float类型即可,同时建议用toFloatOrNull避免转换崩溃:

composable(
    route = Screen.InspectProduct.route + "/{description}/{title}/{price}/{imgUrl}",
    arguments = listOf(
        navArgument(name = "title") { NavType.StringType },
        navArgument(name = "description") { NavType.StringType },
        // 这里可以保留FloatType声明,也可以改成StringType,不影响最终效果
        navArgument(name = "price") { NavType.StringType },
        navArgument(name = "imgUrl") { NavType.StringType },
    )
) { backStackEntry ->
    InspectProduct1(
        navController = navController,
        Product(
            title = backStackEntry.arguments?.getString("title")!!,
            description = backStackEntry.arguments?.getString("description")!!,
            imgUrl = backStackEntry.arguments?.getString("imgUrl")!!,
            price = backStackEntry.arguments?.getString("price")?.toFloatOrNull() ?: 0f
        )
    )
}

方案2:使用Navigation Safe Args 插件(推荐,长期维护更稳妥)

启用Compose Navigation的Safe Args插件后,插件会自动生成类型安全的路由类,自动处理参数类型转换、特殊字符转义,不需要手动拼接路由,从根源避免这类类型错误、路由匹配错误。

额外注意事项

你当前直接将description、title这类可能包含/、空格、特殊符号的字段拼入路由,很容易出现路由匹配失败的问题,建议这两个字段也和imgUrl一样做URL编码,取参数时再做URL解码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:54:03