安卓开发: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
相关产品推荐
相关产品推荐

