android - 我如何在没有初始化的情况下在 Kotlin 中声明一个可以从类中的任何 fun 访问的 val?

标签 android kotlin

我正在 Kotlin 中创建一个内容提供程序,它使用一个数据库来存储数据并使用加载程序查询它们,问题是,我需要我的 DBHelper 变量可以从任何函数访问:onCreate、query、update 等。 .. 在 java 中这很容易,但在 Kotlin 中,IDE 告诉我必须初始化 val,我尝试使用 init block ,但 android studio 说 DBHelper 必须在 onCreate() 中初始化

那么,我如何在 Kotlin 中创建一个类中任何函数都可以访问并且可以像 Java 一样在 onCreate 函数中初始化的 val?

这是我的代码:

public class ProviderMMR : ContentProvider() {
var dbHelper


companion object Matcher{
    var uriMatcher = UriMatcher(UriMatcher.NO_MATCH)

    init{
        uriMatcher.addURI(MMDContract.columnas.AUTHORITY,MMDContract.columnas.TABLA_FARMACIA,1)
    }

}

override fun onCreate(): Boolean {
    dbHelper  =  mmrbd(context)

    return true
}

override fun insert(uri: Uri?, values: ContentValues?): Uri {
    val db = dbHelper.writableDatabase

    val rowID = db.insert(MMDContract.columnas.TABLA_FARMACIA, null, values)


    val uri_actividad = ContentUris.withAppendedId(MMDContract.columnas.CONTENT_BASE_URI, rowID)

    return uri_actividad



}

override fun query(uri: Uri?, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}


override fun update(uri: Uri?, values: ContentValues?, selection: String?, selectionArgs: Array<out String>?): Int {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun delete(uri: Uri?, selection: String?, selectionArgs: Array<out String>?): Int {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun getType(uri: Uri?): String {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

最佳答案

您还可以使用延迟委托(delegate),它将在第一次访问时创建您的 dbHelper 对象

val dbHelper by lazy { mmrbd(context) }

关于android - 我如何在没有初始化的情况下在 Kotlin 中声明一个可以从类中的任何 fun 访问的 val?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557748/

相关文章:

Kotlin 和 MockK 抛出 com.sun.tools.attach.AttachNotSupportedException : no providers installed

kotlin - Arrow的filterOrElse和filterOrOther有什么区别?

java - Android 应用 map View 中只有卫星模式

android - 按需组合嵌套 Observable 的最新值

android - 应用程序的用户可以看到 https 数据包中的内容吗?

android - 将 Android Studio 更新到 1.3.0 版后,出现 "NDK integration is deprecated in the current plugin"错误

android - 如何使用批注在改造请求中动态添加授权 header ?

android - 如何使用 Fuel for Kotlin 发布多部分/表单数据?

android - 从 Firebase DB 中检索失败的值,得到 null 而不是预期的 String

android - 存储应用程序全局数据