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

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获取方法:

  1. 创建DBHelper实例时,使用requireContext()(该方法会在Fragment依附的Context不存在时抛出明确异常,避免空指针隐患):
val db = DBHelper(requireContext(), null)
  1. 显示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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:59:53