Jetpack Compose导航添加重复NavType参数时崩溃问题
崩溃报错信息
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 } )
解决方案
确保DeepLink URI参数键唯一
检查导航DeepLink配置,每个参数对应唯一的键,正确的URI格式示例:android-app://androidx.navigation/page_detail?key1={key1}&key2={key2}&key3={key3}&key5={key5}避免重复参数名(比如多个
arg1),每个占位符要和定义的KEY_1、KEY_2等一一对应。使用数组类型接收同类型多参数
如果需要传递多个同类型参数(比如多个字符串),将参数类型改为数组类型,示例修改:navArgument(KEY_STRINGS){ defaultValue = emptyArray() type = NavType.StringType.arrayType }对应的DeepLink URI要使用重复参数键:
android-app://androidx.navigation/page_detail?strings={strings}&strings={strings}这样Navigation会自动将多参数值解析为数组。
检查参数KEY的唯一性
确认所有navArgument的KEY(KEY_1、KEY_2等)无重复定义,重复KEY会导致参数解析冲突。
原因说明
Navigation组件默认要求单个非数组类型的查询参数只能在URI中出现一次。当检测到同类型参数数量超限(或参数名重复)时,会抛出该异常,提示要么使用唯一参数键,要么改用数组类型接收多值参数。
内容的提问来源于stack exchange,提问作者Jeevan Rupacha
相关产品推荐
相关产品推荐

