在 android Navigation deeplink 错误:数组不支持默认值
Posted
技术标签:
【中文标题】在 android Navigation deeplink 错误:数组不支持默认值【英文标题】:in android Navigation deeplink Error: Arrays don't support default values 【发布时间】:2022-01-06 01:08:45 【问题描述】:我有一个这样的深层链接:
<deepLink
android:id="@+id/applink_one"
app:uri="https://sample.com/arg1/?arg2=arg2" />
并像这样定义参数:
<argument
android:name="arg1"
app:argType="string" />
<argument
android:name="arg2"
android:defaultValue="@null"
app:argType="string[]"
app:nullable="true"
/>
调用时:
https://sample.com/tags/?arg2=test&arg2=toast
我收到此错误并退出应用程序:
Caused by: android.view.InflateException: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: java.lang.UnsupportedOperationException: Arrays don't support default values.
我无法检测到错误。
“数组不支持默认值。”?
我能做什么?
我的导航版本:
androidx.navigation:navigation-fragment-ktx:2.2.0
androidx.navigation:navigation-ui-ktx::2.2.0
androidx.navigation:navigation-safe-args-gradle-plugin:2.2.0
整个堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sample.app, PID: 24284
java.lang.RuntimeException: Unable to start activity ComponentInfocom.sample.app/com.sample.app.presentation.NavHostActivity: android.view.InflateException: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Error inflating class androidx.fragment.app.FragmentContainerView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3835)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8633)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: android.view.InflateException: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #19 in com.sample.app:layout/activity_nav_host: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: java.lang.UnsupportedOperationException: Arrays don't support default values.
at androidx.navigation.NavType$11.parseValue(NavType.java:623)
at androidx.navigation.NavType$11.parseValue(NavType.java:609)
at androidx.navigation.NavType.parseAndPut(NavType.java:96)
at androidx.navigation.NavDeepLink.parseArgument(NavDeepLink.java:187)
at androidx.navigation.NavDeepLink.getMatchingArguments(NavDeepLink.java:174)
【问题讨论】:
请包括整个堆栈跟踪以及您使用的导航版本。 @ianhanniballake 已更新。 您是否尝试过使用更新版本的导航? Navigation 2.2 在这一点上已经快两年了。 Navigation 2.3.5 是最新的稳定版,2.4.0-beta02 是目前最新的版本。 现在我正在与 2.4.0-beta02 同步 ... 已更新,但仍显示“数组不支持默认值。” 【参考方案1】:删除这个错误的默认值,不能为[]
类型设置:
android:defaultValue="@null"
app:nullable="true"
它还显示R.layout.activity_nav_host
,行#19
...这可能是在哪里看。
否则深层链接将通过String[]
:
https://sample.com/tags/?arg2=[test,toast]
【讨论】:
不,我试过了,但没有任何改变 深层链接引用arg2=
两次......所以你没有正确调用它。上述错误默认值可能会出现更多情况,不能为[]
类型设置。
不,这不是错字,我想将 arg2 作为值列表处理;在我的示例中:“sample.com/tags/?arg2=test&arg2=toast”,arg1 等于标签,arg2 将是测试和 toast 的列表:[“test”,“toast”]。但是,它也会因调用“sample.com”而崩溃。
deep-link 是一个错字,因为这不是创建输入数组的首选方式......当使用两次时,服务器端可能只注册最后一个(在至少在 php 中,不确定如何为深层链接实现 URL 方案)。这个“默认”值可能来自第一个 arg2
,第二个 arg2
试图改变它。
也许app:uri
URL 方案已经必须代表数组输入?这至少是模式的来源。以上是关于在 android Navigation deeplink 错误:数组不支持默认值的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio navigation 一直在Loading为啥?