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
相关产品推荐
相关产品推荐

