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

Kotlin开发记事本App编辑内容始终执行新增逻辑无法进入更新分支求助

问题原因
  • 变量重名导致全局ID未被正确赋值:你在类顶部声明了全局可空变量var id: Int? = 0,但在onViewCreated末尾又用val id = arguments?.getInt("ID")声明了一个同名局部变量,从参数中拿到的编辑ID仅赋值给了这个局部变量,全局ID始终保持初始值0,因此点击按钮时判断条件id == 0永远成立,只会走新增逻辑。
  • 参数取值逻辑存在安全隐患:arguments?.getInt("ID")在arguments为空时会返回null,且getInt方法默认缺省值为0,你当前的判断逻辑没有兼容空场景,同时没有将拿到的有效ID回写给全局变量。
修复方案

调整后的代码如下:

var id: Int? = 0

override fun onViewCreated(view: View, savedInstanceState: Bundle? ) {
  super.onViewCreated(view, savedInstanceState)

  addbt.setOnClickListener {
    var dbManger = DbManger(this.requireContext())
    val title = ettittel.text.toString()
    val beschreibung = etbeschreibung.text.toString()
    val values = ContentValues()
    values.put("Title", title)
    values.put("Beschreibung", beschreibung)

    if (id == 0) {
      // 局部变量更名避免和全局id重名
      val insertId = dbManger.insertNotiz(values)
      if (insertId > 0) {
        Toast.makeText(this.context, "文本已添加", Toast.LENGTH_LONG).show()
      } else {
        Toast.makeText(this.context, "添加失败", Toast.LENGTH_LONG).show()
      }
    } else {
      // 先对可空id做非空判断避免空指针
      id?.let { safeId ->
        val selectionArgs = arrayOf(safeId.toString())
        val updateCount = dbManger.update(values, "ID=?", selectionArgs)
        if (updateCount > 0) {
          Toast.makeText(this.context, "文本已修改", Toast.LENGTH_LONG).show()
        } else {
          Toast.makeText(this.context, "修改失败", Toast.LENGTH_LONG).show()
        }
      }
    }
  }

  setHasOptionsMenu(true)
  // 直接给全局id赋值,不再声明同名局部变量,显式指定getInt缺省值提升可读性
  id = arguments?.getInt("ID", 0)
  
  // 兼容可空场景的判断逻辑
  id?.takeIf { it != 0 }?.let { _ ->
    val Title = arguments?.getString("Title")
    ettittel.setText(Title)
    val beschreibung = arguments?.getString("Beschreibung")
    etbeschreibung.setText(beschreibung)
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:07