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

类型安全导航问题:带参数起始目标引发序列化异常

解决Jetpack Navigation序列化异常问题

问题原因

你传入的startDestination参数是MainScreenFirstScreen这个data class的Companion对象(Kotlin中直接引用类名会指向其Companion),而该Companion未标记@Serializable,导致Navigation组件尝试序列化它时抛出异常。

修复步骤

1. 修正导航图的startDestination参数

将导航图构建代码中的startDestination改为传入KClass(添加::class后缀):

fun NavGraphBuilder.mainScreenOwnerNavGraph(
    navHostController: NavHostController,
) {
    navigation<OwnerGraph.MainScreen>(
        // 修正:添加::class,传入KClass而非Companion对象
        startDestination = OwnerGraph.MainScreen.MainScreenFirstScreen::class
    ) {
        composable<OwnerGraph.MainScreen.MainScreenFirstScreen> { navBackStackEntry ->
            Text("Main Screen")
        }
    }
}

2. 确认序列化配置正确

确保项目已正确配置kotlinx.serialization插件和依赖:

  • 在Module级别的build.gradle中添加序列化插件:
    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
        id 'kotlinx-serialization' // 必须添加
    }
    
  • 添加序列化依赖:
    dependencies {
        implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
        implementation "androidx.navigation:navigation-compose:2.7.5" // 确保导航依赖版本正确
    }
    

3. 验证导航调用代码

你的导航调用代码无需修改,直接传入MainScreenFirstScreen实例即可:

onNavigateToNextScreen = { id ->
    navHostController.navigate(
        route = OwnerGraph.MainScreen.MainScreenFirstScreen(id = id)
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:43:17