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

安卓开发:Firebase的RecyclerView数据如何传递至二级Activity

安卓Kotlin书籍列表跳转详情页的数据传递异常排查

核心问题点

  • 跨页面传值键名完全错位:适配器跳转时通过"jbg"作为键携带Book数据,二级页面取值时错误使用了"String"作为键,系统无法匹配到对应的数据,会直接触发类型转换失败、空指针异常导致崩溃。
  • 二级页面控件绑定逻辑存在低级赋值错误:作者信息控件重复绑定了书籍名称字段,没有正确传入作者对应的writer属性。
  • Parcelable实现不符合@Parcelize规范:Book实体类结尾的Parcelable!是冗余的平台类型声明,会干扰@Parcelize注解的代码生成逻辑,导致序列化流程异常。
  • 空安全校验缺失:直接将取值结果强转为非空Book类型,没有对取值失败的场景做兜底处理。

修正方案

1. 调整Book实体类的Parcelable实现

import kotlinx.parcelize.Parcelize
import android.os.Parcelable

@Parcelize
data class Book(
    val imageUrl: String = "URL IMmage",
    val name: String = "Naziv knjige",
    val writer: String = "Pisac knjige"
) : Parcelable

2. 统一传值键名、修正二级页面绑定逻辑

class BookDescription : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_book_description)
        // 与适配器的传值键保持一致,增加空值兜底避免崩溃
        val book = intent.getParcelableExtra<Book>("jbg") ?: run {
            finish()
            return
        }
        Glide.with(this).load(book.imageUrl).into(bookImg1)
        nameTxt1.text = book.name
        // 修正错误赋值,绑定作者字段
        autorTxt1.text = book.writer
    }
}

长期优化建议

  • 在项目中定义全局常量类存储所有Intent传值的键名,避免手动硬编码字符串导致的键名不匹配问题。
  • 可针对Kotlin代码封装getParcelableExtra的扩展函数,简化取值逻辑的同时统一空值兜底处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 20:06:02