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

Kotlin向MutableMap动态添加键值对仅存最后一项问题排查

Kotlin MutableMap 动态添加键值对方法及问题修复

问题根因

  • 你在弹窗初始化阶段就提前读取了输入框的文本,此时用户还未输入内容,提前缓存的keyjson、valuejson是固定的初始值,后续点击添加按钮时从未重新读取输入框的最新内容,所有添加操作都在复用同一个固定键。
  • 每次执行showDialogBody()方法时,你都会重新创建一个新的MutableMap赋值给jsonMap,之前存储的所有条目会被直接清空。
  • MutableMap的键具有唯一性,对同一个键重复执行put操作只会覆盖对应的值,不会新增条目,因此最终Map里只会留存最后一次覆盖后的单条数据。

MutableMap添加键值对的标准写法

Kotlin中为可变映射动态添加键值对有两种常用写法,效果完全一致:

  • 调用put方法:jsonMap.put(键, 值)
  • 使用操作符简写:jsonMap[键] = 值(更符合Kotlin编码习惯)

修复后可正常运行的代码

// 若需要保留多次打开弹窗添加的条目,将Map初始化放在方法外部
// 若需要每次打开弹窗清空历史数据,可将初始化移到方法内,注意初始化为空map即可
private var jsonMap = mutableMapOf<String, String>()

private fun showDialogBody() {
    val dialog = Dialog(this)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setCancelable(true)
    dialog.setContentView(R.layout.dialogue_view)
    val bodyKey = dialog.findViewById(R.id.key) as EditText
    val bodyValue = dialog.findViewById(R.id.value) as EditText
    val addBtn = dialog.findViewById(R.id.dialogDismiss_button) as Button
    val finishBtn = dialog.findViewById(R.id.dialogDismiss_finish_button) as Button

    addBtn.setOnClickListener {
        // 点击添加按钮时才实时读取输入框的最新内容,不要提前缓存
        val currentKey = bodyKey.text.toString().trim()
        val currentValue = bodyValue.text.toString().trim()

        // 空键校验,避免无效数据存入
        if (currentKey.isNotEmpty()) {
            jsonMap[currentKey] = currentValue
            Toast.makeText(this, "$currentKey Added", Toast.LENGTH_SHORT).show()
            bodyKey.text.clear()
            bodyValue.text.clear()
        }
    }

    finishBtn.setOnClickListener {
        dialog.dismiss()
        Toast.makeText(this, "number of key value ${jsonMap.size}", Toast.LENGTH_SHORT).show()
    }

    dialog.show()
}

注意:如果需要允许同一个键对应多个值,不要使用普通MutableMap,改用MutableMap<String, MutableList<String>>结构,添加值时向对应键的列表中追加元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:45:53