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

时间:2019-03-07 09:44:05

标签: android kotlin import singleton

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

单例课程:
 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)*/
        {

        }
    }

在其他课程中的使用:  不可能访问getInstance()

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

有什么想法吗? 预先感谢。

1 个答案:

答案 0 :(得分:3)

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

object是Kotlin中处理单例的默认方式。但是,如果您需要更强大的功能并需要一个实例,请查看以下内容:Singleton class in Kotlin

基本上,您从companion object返回该类的实例。

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