【问题标题】:in android Navigation deeplink Error: Arrays don't support default values在 android Navigation deeplink 错误:数组不支持默认值
【发布时间】: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 ComponentInfo{com.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 同步 ...
  • 已更新,但仍显示“数组不支持默认值。”

标签: android deep-linking android-architecture-navigation android-navigation android-deep-link


【解决方案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 方案已经必须代表数组输入?这至少是模式的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2020-05-15
  • 2010-11-03
  • 2011-07-04
  • 2015-06-13
相关资源
最近更新 更多