【问题标题】:Access Database Handler Inside Fragment访问片段内部的数据库处理程序
【发布时间】:2019-05-26 19:50:34
【问题描述】:

我正在尝试访问 fragment 内的数据库处理程序,但它向我抛出了此错误 does not have companion object error。我尝试了数据库处理程序查询并且它工作正常。任何帮助表示赞赏。

使用的语言

Kotlin

代码

class OneFragment : Fragment() {

     companion object
{
//Error in the below context
    var db=TestDatabaseHandler(Context)
}

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
    {

    var a=db.readData()

    }

    }

【问题讨论】:

    标签: android android-studio android-fragments android-intent kotlin


    【解决方案1】:

    您无法在companion object {} 中访问context。而是将db 更改为类OneFragment 的字段,如下所示

    class OneFragment : Fragment() {
    
        val db by lazy { TestDatabaseHandler(context!!) }
    
        override fun onCreateView(...)
            var a = db.readData()
        }
    }
    

    参考 - Antonio Leiva 的 Property delegation in Kotlin

    【讨论】:

    • 感谢您的回复。我已经试过了,但是得到了 NullPointerException.val db=TestDatabaseHandler(this!!.context!!)
    • 实际上,在您的TestDatabaseHandler 类中,您应该接受一个可为空的上下文,并在使用它的任何地方进行空检查
    • 这是我的数据库句柄类 TestDatabaseHandler(var context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { }
    • 在 Kotlin 中有一种很好的方法可以解决这个问题,称为惰性委托。我已更新答案以正常工作。
    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多