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

Android通过NavArgs传递Room实体在Fragment间跳转时App崩溃如何解决

报错根因

你遇到的java.lang.NoSuchMethodException: java.lang.Object.fromBundle报错,核心是Navigation Safe Args组件无法对自定义User类做序列化/反序列化处理,找不到对应解析方法所以向上找Object类的同名方法触发崩溃。

修复步骤

1. 给User类添加Parcelable实现

Android跨组件传递自定义对象必须实现Parcelable接口,Kotlin可以用kotlin-parcelize插件快速生成实现代码:
首先在模块级build.gradle中添加插件:

plugins {
    ...
    id 'kotlin-parcelize'
    id 'androidx.navigation.safeargs.kotlin'
}

然后修改你的User实体类:

import android.os.Parcelable
import androidx.room.Entity
import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize

@Parcelize
@Entity(tableName = "user_table") // 保持你原来的Room注解不变
data class User(
    @PrimaryKey(autoGenerate = true)
    val id: Int,
    val firstName: String,
    val lastName: String,
    val age: Int
) : Parcelable

2. 修正导航图参数配置

打开你的导航图xml文件,确认UpdateFragment的参数配置中,argType填写User类的完整包名:

<fragment
    android:id="@+id/updateFragment"
    android:name="com.example.testingroomdatabase.realFragments.update.UpdateFragment"
    android:label="UpdateFragment">
    <argument
        android:name="currentUser"
        app:argType="com.example.testingroomdatabase.model.User"
        app:nullable="false" />
</fragment>

注意参数名currentUser必须和你代码中调用的名称完全一致。

3. 清理重建项目

缓存会导致Safe Args无法生成正确的解析类,依次点击Android Studio顶部菜单栏 Build → Clean Project → Rebuild Project,之后重新运行应用即可。

额外检查项

如果问题仍存在,确认项目根目录build.gradle中已经添加Safe Args依赖:

buildscript {
    dependencies {
        def nav_version = "2.5.3" // 替换为你项目使用的Navigation版本
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03