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
?
我想创建一个单例来访问一些函数,但是当我导入它时,它找不到要导入的 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
?