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

Jetpack Compose导航添加重复NavType参数时崩溃问题

解决Android Navigation重复参数类型引发的IllegalArgumentException崩溃

崩溃报错信息

java.lang.IllegalArgumentException: Query parameter  must only be present once in android-app://androidx.navigation/page_detail?arg1={arg1}. To support repeated query parameters, use an array type for your argument and the pattern provided in your URI will be used to parse each query parameter instance.

问题场景

当导航参数配置中存在超过2个相同NavType类型的参数时(比如示例里的3个StringType),会触发上述崩溃。

当前参数配置

val arguments = listOf(
        navArgument(KEY_1){
            defaultValue = ""
            type = NavType.StringType
        },
        navArgument(KEY_2){
            defaultValue = ""
            type = NavType.StringType
        },
        navArgument(KEY_3){
            defaultValue = ""
            type = NavType.StringType
        },
        navArgument(KEY_5){
            defaultValue = -1
            type = NavType.LongType
        }
    )

解决方案

  1. 确保DeepLink URI参数键唯一
    检查导航DeepLink配置,每个参数对应唯一的键,正确的URI格式示例:

    android-app://androidx.navigation/page_detail?key1={key1}&key2={key2}&key3={key3}&key5={key5}
    

    避免重复参数名(比如多个arg1),每个占位符要和定义的KEY_1、KEY_2等一一对应。

  2. 使用数组类型接收同类型多参数
    如果需要传递多个同类型参数(比如多个字符串),将参数类型改为数组类型,示例修改:

    navArgument(KEY_STRINGS){
        defaultValue = emptyArray()
        type = NavType.StringType.arrayType
    }
    

    对应的DeepLink URI要使用重复参数键:

    android-app://androidx.navigation/page_detail?strings={strings}&strings={strings}
    

    这样Navigation会自动将多参数值解析为数组。

  3. 检查参数KEY的唯一性
    确认所有navArgument的KEY(KEY_1、KEY_2等)无重复定义,重复KEY会导致参数解析冲突。

原因说明

Navigation组件默认要求单个非数组类型的查询参数只能在URI中出现一次。当检测到同类型参数数量超限(或参数名重复)时,会抛出该异常,提示要么使用唯一参数键,要么改用数组类型接收多值参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:13