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

Android Kotlin中Activity间传递变量时villain4Position异常问题

Bundle传递villain4Position失败的解决方案

在Android Kotlin开发中,我尝试通过Bundle向PositionActivityLeft自身传递多个变量,其余变量都能正常接收,但villain4Position始终只能获取到默认值"_"。已经确认传递前该变量的值是正确的,尝试过修改变量名、调整代码位置都没有效果;之前用MutableList存储反派位置时,第4个元素(索引3)也出现过同样的问题。

打包代码:

var intentNext= Intent(this@PositionActivityLeft, PositionActivityLeft::class.java)
val bundle = Bundle()
bundle.putBoolean("confirmChoices", confirmChoices)
bundle.putString("gameType", gameType)
bundle.putInt("smallBlind", smallBlind)
bundle.putInt("bigBlind", bigBlind)
bundle.putInt("buyIn", buyIn)
bundle.putInt("handsPerHour", handsPerHour)
bundle.putString("venue", venue)
bundle.putString("location", location)
bundle.putString("venueType", venueType)
bundle.putInt("numSession", numSession)
bundle.putInt("numSessionHands", numSessionHands)
bundle.putInt("stackSize", stackSize)
bundle.putInt("numVillains", numVillainsCount)
bundle.putString("heroPosition", heroPosition)
bundle.putString("villain1Position", villain1Position)
bundle.putString("villain2Position", villain2Position)
bundle.putString("villain3Position", villain3Position)
bundle.putString("Villain4Position", villain4Position)
bundle.putString("villain5Position", villain5Position)
bundle.putString("villain6Position", villain6Position)
bundle.putString("villain7Position", villain7Position)
bundle.putString("villain8Position", villain8Position)
intentNext.putExtras(bundle)
startActivity(intentNext)
overridePendingTransition(0,0)

读取代码:

class PositionActivityLeft : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_position_left)

// other variable declarations

        val bundle: Bundle? = intent.extras
        val confirmChoices = bundle!!.getBoolean("confirmChoices")
        val gameType = bundle.getString("gameType")
        val smallBlind = bundle.getInt("smallBlind")
        val bigBlind = bundle.getInt("bigBlind")
        val buyIn = bundle.getInt("buyIn")
        val handsPerHour = bundle.getInt("handPerHour")
        val venue = bundle.getString("venue")
        val location = bundle.getString("location")
        val venueType = bundle.getString("venueType")
        val numSession = bundle.getInt("numSession")
        val numSessionHands = bundle.getInt("numSessionHands")
        val stackSize = bundle.getInt("stackSize")
        val numVillains = bundle.getInt("numVillains")
        var heroPosition = bundle.getString("heroPosition")
        var villain1Position = bundle.getString("villain1Position","_")
        var villain2Position = bundle.getString("villain2Position","_")
        var villain3Position = bundle.getString("villain3Position","_")
        var villain4Position = bundle.getString("villain4Position","_")
        var villain5Position = bundle.getString("villain5Position","_")
        var villain6Position = bundle.getString("villain6Position","_")
        var villain7Position = bundle.getString("villain7Position","_")
        var villain8Position = bundle.getString("villain8Position","_")

问题核心

你代码里的key大小写不匹配是直接原因:

  • 打包时存入Bundle的key是"Villain4Position"(首字母大写V)
  • 读取时使用的key是"villain4Position"(首字母小写v)

Bundle的key严格区分大小写,因此读取时找不到对应值,只能返回默认的"_"。

修复方案

任选一种方式保持key一致即可:

  1. 修改打包代码的key为小写开头:
bundle.putString("villain4Position", villain4Position)
  1. 或修改读取代码的key为大写开头:
var villain4Position = bundle.getString("Villain4Position","_")

优化建议

为避免此类低级错误,推荐两种更规范的写法:

  1. 用常量统一定义所有Bundle的key:
companion object {
    const val KEY_VILLAIN_4_POSITION = "villain4Position"
    // 其他所有传递的key也用常量定义
}

打包和读取时都使用常量,彻底杜绝拼写/大小写错误。

  1. 封装成Parcelable数据类传递:
    将所有相关变量封装成一个实现Parcelable的数据类,一次性传递整个对象,代码更简洁易维护:
// 定义数据类
@Parcelize
data class GameConfig(
    val confirmChoices: Boolean,
    val gameType: String?,
    // ... 其他所有变量
    val villain4Position: String?
) : Parcelable

// 传递时
val gameConfig = GameConfig(/* 填充所有变量值 */)
val intentNext = Intent(this@PositionActivityLeft, PositionActivityLeft::class.java)
intentNext.putExtra("gameConfig", gameConfig)
startActivity(intentNext)

// 读取时
val gameConfig = intent.getParcelableExtra<GameConfig>("gameConfig")
val villain4Position = gameConfig?.villain4Position ?: "_"

内容的提问来源于stack exchange,提问作者Vic.Cruzr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:45:14