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

7kjnsjlb  于 2024-01-04  发布在  Android
关注(0)|答案(3)|浏览(275)

错误:

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

字符串

Navroot主机:

  1. animatedCompose("${Graph.BOOK}/{id}",
  2. arguments = listOf(
  3. navArgument("id"){
  4. type = NavType.LongType
  5. defaultValue = -1
  6. }
  7. )
  8. ){
  9. val id = it.arguments?.getInt("id") ?: -1
  10. val actionText = if(id != -1) "Save" else "Add"
  11. val title = if(id != -1) "Edit Book" else "Add New Book"
  12. BookScreen(navHostController, title=title, actionText=actionText)
  13. }

从另一个屏幕中:

  1. Scaffold(
  2. floatingActionButton = {
  3. FloatingActionButton(onClick = {
  4. rootNavHostController.navigate(Graph.BOOK)
  5. }) {
  6. Icon(Icons.Filled.Add,null)
  7. }
  8. }


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

8wigbo56

8wigbo561#

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

  1. navController.navigate(
  2. Screen.DetailScreen.withArgs(
  3. Gson()
  4. .toJson(itemSkin)
  5. .toString()
  6. .replace("/", "$$$")
  7. )
  8. )

字符串

uajslkp6

uajslkp62#

通过以下方式解决:

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

字符串

kgsdhlau

kgsdhlau3#

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

  1. 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,它工作得很好,你可以像这样使用它

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


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

  1. fun NavGraphBuilder.imageRoute(navController: NavController) {
  2. composable(
  3. route = "${Screen.Image.route}/{${ImageArgs.IMAGE_URL}}",
  4. arguments = listOf(
  5. navArgument(ImageArgs.IMAGE_URL) {
  6. type = NavType.StringType
  7. },
  8. )
  9. ) {
  10. ImageScreen(navController = navController)
  11. }
  12. }


Happy coding!:D

展开查看全部

相关问题