【问题标题】:Implementation of SQLite in Kotlin and Anko在 Kotlin 和 Anko 中实现 SQLite
【发布时间】:2017-06-11 17:52:29
【问题描述】:

我已经创建了如下所示的应用程序数据库。我想现在插入记录并检索,因为这个链接说https://antonioleiva.com/databases-anko-kotlin/ 使用database.use

import android.database.sqlite.SQLiteDatabase
import org.jetbrains.anko.db.*


class AppDbHelpler : ManagedSQLiteOpenHelper(AppApplication.instance(), AppDbHelpler.DB_NAME, null, AppDbHelpler.DB_VERSION) {

    companion object {
        val DB_NAME = "person.db"
        val DB_VERSION = 1
        val instance by lazy { AppDbHelpler() }
    }

    override fun onCreate(db: SQLiteDatabase?) {
        db!!.createTable(PersonTable.Name, true,
                Pair(PersonTable.ID, INTEGER + PRIMARY_KEY + AUTOINCREMENT),
                Pair(PersonTable.PersonName, TEXT),
                Pair(PersonTable.Domain, TEXT),
                Pair(PersonTable.MobileNumber, REAL))
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db!!.dropTable(PersonTable.Name, true)
        onCreate(db)
    }
}

// Access property for Context
val Context.database: AppDbHelpler
get() = AppDbHelpler()

MainActivity.kt

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

    insertPerson()
}


fun insertPerson() {
    database.use {

    }
}

谁能提示我val Context.database: AppDbHelpler get() = AppDbHelpler() 是哪一行。它有什么作用?

【问题讨论】:

    标签: android sqlite kotlin anko


    【解决方案1】:

    val Context.database 是 Kotlin 中 extensions 的用法。它们允许您在使用Context 的类(或其他函数)中访问值database

    下面的get() 方法定义了该变量的property。它等效于 Java 中的 getDatabase() 方法,它将返回 AppDbHelper,如图所示。通过这种方式,您可以使用变量语法检索帮助程序。由于 getter 是一个函数,它每次都会创建一个新的帮助器,而不是一个实际变量在一次赋值时的行为方式。另请注意,由于这是 val,因此未提供 set 方法。

    代码相当于

    public static AppDbHelper getDatabase(Context context) {
        return new AppDbHelper();
    }
    

    在 Java 中

    【讨论】:

    • Extensions- 它是否允许您从任何地方访问变量,这取决于之前的点类型。如果它是Context,那么它允许在您拥有Context 的地方调用此方法。如果我指定X,那么它将允许我在有X 可用的地方调用它。这是它的工作原理吗?
    • 在这种特殊情况下,如果你在一个Activity(它扩展了上下文)中,你可以直接写database来使用它。如果您在视图中,则不能直接使用它。但是您可以致电context.database。注意Views中的context直接引用getContext()。如果你熟悉 Kotlin 中的withapply 方法,可以使用context.apply{ database } 来获取。扩展允许您使用方法/变量,就好像它是原始类的一部分一样。但最终它是静态调用的,因此您不会创建自定义类。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多