android java.lang.IllegalArgumentException:与请求NavDeepLinkRequest匹配的导航目标

7kjnsjlb  于 5个月前  发布在  Android
关注(0)|答案(3)|浏览(97)

错误:

java.lang.IllegalArgumentException: Navigation destination that matches request NavDeepLinkRequest{ uri=android-app://androidx.navigation/book_screen } cannot be found

字符串

Navroot主机:

animatedCompose("${Graph.BOOK}/{id}",
arguments = listOf(
    navArgument("id"){
        type = NavType.LongType
        defaultValue = -1
    }
)
    ){
    val id = it.arguments?.getInt("id") ?: -1
    val actionText = if(id != -1) "Save" else "Add"
    val title = if(id != -1) "Edit Book" else "Add New Book"
    BookScreen(navHostController, title=title, actionText=actionText)
}

从另一个屏幕中:

Scaffold(
        floatingActionButton = {
            FloatingActionButton(onClick = {
                rootNavHostController.navigate(Graph.BOOK)
            }) {
                Icon(Icons.Filled.Add,null)
            }
        }


我假设,你可以把{id}作为一个可选的参数。但是,不确定为什么现在事情不起作用。

8wigbo56

8wigbo561#

也许有人还在寻找这个答案:我有这个问题,因为发送了一个JSON到另一个屏幕,它包含“/",所以我只是这样替换它:

navController.navigate(
                        Screen.DetailScreen.withArgs(
                            Gson()
                                .toJson(itemSkin)
                                .toString()
                                .replace("/", "$$$")
                        )
                    )

字符串

uajslkp6

uajslkp62#

通过以下方式解决:

animatedCompose("${Graph.BOOK}/?id={id}",
  arguments = listOf(
            navArgument("id"){
                type = NavType.IntType
                defaultValue = -1
            }
        ){}

字符串

kgsdhlau

kgsdhlau3#

对于任何人谁想要一个简单的解决方案,不使用 *Gson或什么的。今天我在一个应用程序的工作,其中一个要求是发送一个图像链接到另一个屏幕。
URL是这样的https://westandwithpalastine.com/gaza/. URL是一个字符串,但当我使用Parcelable将其发送到另一个屏幕时,它假设它是“(Uri)”所以我得到了这个错误消息

error message: java.lang.IllegalArgumentException: Navigation destination that matches request NavDeepLinkRequest{ uri=android-app://androidx.navigation/display_photo/https://via.placeholder.com/600/dc17bf } cannot be found in the navigation graph ComposeNavGraph(0x0) startDestination={Destination(0x845f817c) route=profile} at androidx.navigation.NavController.navigate(NavController.kt:1815) at androidx.navigation.NavController.navigate(NavController.kt:2221) at androidx.navigation.NavController.navigate$default(NavController.kt:2216)

字符串

那么解决方案是什么

使用encoded URL,它工作得很好,你可以像这样使用它

fun NavController.navigateToImageScreen(
    imageUrl: String,
) {
    val encodedUrl = URLEncoder.encode(imageUrl, StandardCharsets.UTF_8.toString())
    navigate("${Screen.Image.route}/$encodedUrl")
}


现在它可以正常工作了。如果你想知道路由函数是如何工作的,这里是完整的代码。

fun NavGraphBuilder.imageRoute(navController: NavController) {
composable(
    route = "${Screen.Image.route}/{${ImageArgs.IMAGE_URL}}",
    arguments = listOf(
        navArgument(ImageArgs.IMAGE_URL) {
            type = NavType.StringType
        },
    )
) {
    ImageScreen(navController = navController)
  }
}


Happy coding!:D

相关问题