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

Android Deep Link传递字符串数组报错,求正确参数格式

解决Android Deep Link传递字符串数组参数的报错问题

错误原因分析

你遇到的"Arrays don't support default values."错误,直接原因是Navigation组件不允许为数组类型的参数设置默认值——哪怕是@null也不行。另外你当前的Deep Link构建方式也有问题:直接拼接数组$subCategories会生成类似[xxx, yyy]的字符串,不符合URI规范,同时Navigation也无法将其解析为字符串数组。

分步解决方案

1. 移除数组参数的默认值配置

修改导航XML中的subCategories参数,删除android:defaultValue="@null":

<deepLink
    android:autoVerify="true"
    app:action="android.intent.action.VIEW"
    app:uri="my-app://com.app/venues/{category}?subCategories={subCategories}" />

<argument
    android:name="subCategories"
    app:argType="string[]"
    app:nullable="true" />

<argument
    android:name="category"
    app:argType="string" />

将数组参数放在查询参数中,而非路径参数里。推荐用逗号分隔数组元素,或者重复参数名的方式:

方式1:逗号分隔数组元素

fun byCategoryDeepLink(
    category: String,
    subCategories: Array<String>
) = DeepLink("my-app://com.app/venues/${category}?subCategories=${subCategories.joinToString(",")}")

方式2:重复查询参数名

fun byCategoryDeepLink(
    category: String,
    subCategories: Array<String>
): DeepLink {
    val queryString = subCategories.joinToString("&") { "subCategories=$it" }
    return DeepLink("my-app://com.app/venues/${category}?$queryString")
}

3. 在目的地解析数组参数

Navigation默认的string[]类型无法自动解析逗号分隔或重复参数,需要手动处理:

针对逗号分隔的情况

// 在目标Fragment中解析
val args = VenuesFragmentArgs.fromBundle(requireArguments())
val subCategories = args.subCategories?.split(",")?.toTypedArray() ?: emptyArray()

针对重复参数的情况

// 在目标Fragment中解析
val subCategories = requireActivity().intent.getStringArrayExtra("subCategories") ?: emptyArray()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:43