Android / Kotlin: я пытаюсь создать простой Singleton, но когда я хочу его использовать, он не импортирует класс в классе, который я хочу использовать - PullRequest
0 голосов
/ 07 марта 2019

Я хотел бы создать синглтон для доступа к некоторым функциям, но когда я его импортирую, он не находит класс для импорта:
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 Ответ

3 голосов
/ 07 марта 2019

Это не так, как это работает в Котлине.В вашем коде getInstance() - это обычный метод, которому нужен экземпляр вашего класса DBHandler.Таким образом, этот метод не является статическим и не может быть вызван так, как вы пытаетесь это сделать.

object - это стандартный способ создания синглетонов в Kotlin.Но если вы хотите что-то более мощное и нуждаетесь в экземпляре, взгляните на это: Класс Singleton в Kotlin

По сути, вы возвращаете экземпляр класса из companion object.

Кстати, почему ваш DBHandler расширяется AppCompatActivity?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...