Android Kotlin开发报错:推断类型为Fragment但期望Context
解决Fragment中调用SQLiteHelper时的类型不匹配错误
错误原因
你遇到的Type mismatch: inferred type is AddRecipeFragment but Context was expected错误,是因为在Fragment中直接使用this作为Context参数传递给DBHelper构造函数和Toast.makeText()方法,但Fragment本身并不是Context类型,它需要依附于Activity才能获取Context实例。
解决方案
修改AddRecipeFragment.kt中的两处代码,将this替换为Fragment提供的安全Context获取方法:
- 创建DBHelper实例时,使用
requireContext()(该方法会在Fragment依附的Context不存在时抛出明确异常,避免空指针隐患):
val db = DBHelper(requireContext(), null)
- 显示Toast提示时,同样使用
requireContext():
Toast.makeText(requireContext(), name + " added to database", Toast.LENGTH_LONG).show()
修改后的onViewCreated方法完整代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.saveRecipeButton.setOnClickListener{ val db = DBHelper(requireContext(), null) val name = binding.recipeNameTextInput.text.toString() db.addRecipe(name) Toast.makeText(requireContext(), name + " added to database", Toast.LENGTH_LONG).show() binding.recipeNameTextInput.text.clear() } }
额外修复点
注意你的DBHelper.kt中创建表的SQL语句存在语法错误,最后一个列定义后多了一个多余的逗号:
val query = ("CREATE TABLE " + TABLE_NAME + " (" + ID_COL + " INTEGER PRIMARY KEY, " + NAME_COl + " TEXT," + ")")
修改为正确的SQL语句:
val query = ("CREATE TABLE " + TABLE_NAME + " (" + ID_COL + " INTEGER PRIMARY KEY, " + NAME_COl + " TEXT)")
该错误会导致数据库表创建失败,进而引发后续数据操作的异常。
内容的提问来源于stack exchange,提问作者gitcanzo
相关产品推荐
相关产品推荐

