Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
在Kotlin中未调用IsInitialized_Kotlin - Fatal编程技术网

在Kotlin中未调用IsInitialized

在Kotlin中未调用IsInitialized,kotlin,Kotlin,我的日志中没有错误,但是如果(::db.isinitialized)条件下,我无法在中点击调试器 我的代码如下: main活动 class MainActivity : AppCompatActivity() { lateinit var db: DatabaseCommon; override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

我的日志中没有错误,但是如果(::db.isinitialized)条件下,我无法在
中点击调试器

我的代码如下:

main活动

class MainActivity : AppCompatActivity() {

    lateinit var db: DatabaseCommon;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        if(::db.isInitialized) {
            val dbVersion = DatabaseCommon.myInstance.dbVersion;
            val dbName = DatabaseCommon.myInstance.dbName;
            val tableName = DatabaseCommon.myInstance.tableName;
            val name: String = DatabaseCommon.myInstance.name;
            val age: String = DatabaseCommon.myInstance.age;

            try{
                val db = this.openOrCreateDatabase(dbName, Context.MODE_PRIVATE, null)
                var query = "CREATE TABLE IF NOT EXISTS  ${tableName} (${name} VARCHAR, ${age} INT(2))";
                db.execSQL(query)

                query = "INSERT INTO ${tableName} (${name}, ${age}) VALUES ('James', 20)";
                db.execSQL(query);

                Toast.makeText(applicationContext, "CREATED", Toast.LENGTH_LONG);
            }catch(e: Exception) {
                e.printStackTrace();
            }
        }
    }
}
数据库通用

class DatabaseCommon {

    val dbVersion: Int = 1;
    val dbName: String = "db_munsicians";

    val tableName: String = "musicians"
    val name: String = "name";
    var age: String = "age";

    private constructor() {}

    companion object {
        private lateinit var instance: DatabaseCommon;

        val myInstance: DatabaseCommon
            get() {
                if (instance == null) {
                    instance = DatabaseCommon();
                }
                return instance;
            }
    }

    fun returnDbClass() {
        println("I was called");
    }
}

如果我没有将
放入(::db.isinitialized)
我会得到一个错误,即lateinit尚未初始化。如何解决此问题?

您无法使用
实例==null
检查来检查
实例是否未初始化。当您尝试将
实例
null
进行比较时,您尝试获取
实例
的值,但该值未初始化,因为它会引发异常

对于您的情况,您应该使用而不是lateinit one。您可以通过以下方式实施:

private val实例:Lazy=Lazy{DatabaseCommon()}
val myInstance:DatabaseCommon
get()=instance.value
或者这样:

val myInstance:Lazy=Lazy{DatabaseCommon()}