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

Android应用因getSerializableExtra崩溃,求助解决ListView跳转问题

Android ListView跳转详情页崩溃问题解决(Serializable相关)

问题根源分析

  1. 数据传递不匹配:MainActivity中通过Intent传递的是单个字符串(landmarkName),但DetailsActivity试图获取key为landmark的Serializable对象,直接导致类型转换异常或空指针崩溃。
  2. 废弃API使用:getSerializableExtra(String)已被标记为废弃,需要适配Android 13+的新API。

修复步骤

1. 修正MainActivity的Intent传递逻辑

传递完整的LandMark对象,统一使用keylandmark:

binding.listView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
    val intent = Intent(this, DetailsActivity::class.java)
    // 传递完整的LandMark对象
    intent.putExtra("landmark", landmarkList[position])
    startActivity(intent)
}

2. 替换DetailsActivity中的废弃API并加入安全处理

兼容新旧版本Android系统,同时避免类型转换崩溃:

class DetailsActivity : AppCompatActivity() {
    private lateinit var binding: ActivityDetailsBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityDetailsBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 安全获取Serializable对象,兼容新旧版本
        val selectedLandMark = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            intent.getSerializableExtra("landmark", LandMark::class.java)
        } else {
            @Suppress("DEPRECATION")
            intent.getSerializableExtra("landmark") as? LandMark
        }

        // 非空判断后更新UI,避免空指针
        selectedLandMark?.let {
            binding.LandMarkName.text = it.name
            binding.LandMarkCountry.text = it.country
            binding.imageView.setImageResource(it.image)
        } ?: run {
            // 数据为空时返回上一页
            finish()
        }
    }
}

3. 保持LandMark类的Serializable实现不变

当前LandMark类的代码符合要求,无需修改:

package com.example.landmarkbookkotlin

import java.io.Serializable

class LandMark(val name: String, val country: String, val image: Int) : Serializable

关键说明

  • 确保Intent传递的key和接收端的key完全一致,避免因key不匹配导致数据为空。
  • 使用带Class参数的getSerializableExtra新API,消除废弃警告的同时提升类型安全性。
  • 加入非空判断,即使数据传递异常也能优雅处理,避免崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:10