Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android/Kotlin:如何创建使用DBLocal类的类?错误消息:类型不匹配需要上下文_Android_Database_Kotlin - Fatal编程技术网

Android/Kotlin:如何创建使用DBLocal类的类?错误消息:类型不匹配需要上下文

Android/Kotlin:如何创建使用DBLocal类的类?错误消息:类型不匹配需要上下文,android,database,kotlin,Android,Database,Kotlin,我想创建一个通用的DB类来管理一个本地DB和另一个DB。我有一个错误,但我不明白是什么问题 普通课程: class DBHandler { companion object { val sharedInstance = DBHandler() //gérer si sharedinstance est null pour éviter pb d'ecriture } fun methodToSelectData(strQuery: String, dat

我想创建一个通用的DB类来管理一个本地DB和另一个DB。我有一个错误,但我不明白是什么问题

普通课程:

class DBHandler {
    companion object {
        val sharedInstance = DBHandler() //gérer si sharedinstance est null pour éviter pb d'ecriture
    }

    fun methodToSelectData(strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/
    {
        print(message = strQuery)

        val dbLocal = DBLocal(this, null, null, 1) //pb on this line
        dbLocal.methodToSelectData(strQuery)
    }
}
class DBLocal(context: Context, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION)
{

    override fun onCreate(db: SQLiteDatabase)
    {
        print(DATABASE_NAME)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int)
    {

    }
    fun methodToSelectData(strQuery: String)/*, completion: @escaping (_ result:*/
    {

    }

    fun methodToInsertUpdateDeleteData(strQuery: String)/*, completion: @escaping (_ result: Bool) -> Void)*/
    {

    }
    companion object {
        private val DATABASE_VERSION = 1
        private val DATABASE_NAME = "Local.db"
    }
}
DB类:

class DBHandler {
    companion object {
        val sharedInstance = DBHandler() //gérer si sharedinstance est null pour éviter pb d'ecriture
    }

    fun methodToSelectData(strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/
    {
        print(message = strQuery)

        val dbLocal = DBLocal(this, null, null, 1) //pb on this line
        dbLocal.methodToSelectData(strQuery)
    }
}
class DBLocal(context: Context, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION)
{

    override fun onCreate(db: SQLiteDatabase)
    {
        print(DATABASE_NAME)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int)
    {

    }
    fun methodToSelectData(strQuery: String)/*, completion: @escaping (_ result:*/
    {

    }

    fun methodToInsertUpdateDeleteData(strQuery: String)/*, completion: @escaping (_ result: Bool) -> Void)*/
    {

    }
    companion object {
        private val DATABASE_VERSION = 1
        private val DATABASE_NAME = "Local.db"
    }
}

提前感谢。

您可以为
methodToSelectData

fun methodToSelectData(context : Context, strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/
{
    print(message = strQuery)

    val dbLocal = DBLocal(context, null, null, 1) //pb on this line
    dbLocal.methodToSelectData(strQuery)
}
问题:DBLocal类接收一个上下文作为第一个参数,但是当您从DBHandler类调用它时

val dbLocal = DBLocal(this, null, null, 1) //pb on this line
您将
作为DBLocal类传递,该类不是Context类的子类的上下文。这就是你的应用程序抛出错误的原因

错误消息:类型不匹配需要上下文

解决方案:简单的解决方案是将上下文传递到需要上下文来执行作业的方法中

fun methodToSelectData(context: Context, strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/ {
    print(message = strQuery)

    val dbLocal = DBLocal(context, null, null, 1) //pb on this line
    dbLocal.methodToSelectData(strQuery)
}
并在调用DBHandler时传递上下文,例如在活动或服务中

DBHandler.sharedInstance.methodToSelectData(this, "your query", "dataBase")

您在哪里使用
methodToSelectData
方法?在活动/片段中?