Android/Kotlin:我尝试创建一个简单的 Singleton,但是当我想使用它时,它不会在我想使用的 class 中导入 class

Android/Kotlin: I try to create a simple Singleton, but when I want to use it, it doesn't import the class in the class I want to use

我想创建一个单例来访问一些函数,但是当我导入它时,它找不到要导入的 class:

Class 单例:
DBHandler.kt

    package com.xxxxx.GMP_app_android.DBManagement

    import android.database.sqlite.SQLiteDatabase
    import android.database.sqlite.SQLiteOpenHelper
    import android.content.Context
    import android.content.ContentValues
    import android.content.ContentResolver
    import com.NewTelApps.GMP_app_android.DBLocal
    import com.NewTelApps.GMP_app_android.DBServer
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View

    class DBHandler : AppCompatActivity() {
        var sharedManager: DBHandler? = null

        fun createInstance(): DBHandler {
            if (sharedManager == null) {
                sharedManager = DBHandler()
            }
            return sharedManager!!
        }

        fun getInstance(): DBHandler? {
            if (sharedManager == null) createInstance()
            return sharedManager
        }


        fun methodToSelectData(strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/
        {
    /*        val dbLocal = DBLocal(this, null, null, 1)
            dbLocal.methodToSelectData(strQuery)*/
        }

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

        }
    }

另一个用法class: 无法访问 getInstance()

DBHandler.getInstance().methodToSelectData("SELECT * FROM TABLE")

有什么想法吗? 提前致谢。

Kotlin 不是这样的。在您的代码中,getInstance() 是一个常规方法,需要您的 DBHandler class 的一个实例。因此该方法不是静态的,不能像您尝试的那样调用。

object 是 Kotlin 中单例的默认方式。但是如果你想要更强大的东西并且需要一个实例,看看那些:

基本上,您 return 来自 companion object 的 class 实例。

顺便说一句,为什么你的 DBHandler 扩展了 AppCompatActivity