我正在Kotlin中创建一个内容提供程序,它使用数据库存储数据并使用加载器查询它们,问题是,我需要从任何函数都可以访问我的DBHelper变量:onCreate,query,update等... java这很容易但是在Kotlin中,IDE告诉我必须初始化val,我尝试使用init块,但android studio说DBHelper必须在onCreate()中初始化
那么,如何在Kotlin中创建一个可以为类中的任何函数启用的val,并且可以在像Java这样的onCreate函数中初始化?
这是我的代码:
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.
}
Run Code Online (Sandbox Code Playgroud)
}
您还可以使用lazy delegate,它将在首次访问时创建您的dbHelper对象
val dbHelper by lazy { mmrbd(context) }
Run Code Online (Sandbox Code Playgroud)
您可以lateinit var在onCreate中使用和初始化它。在此处检查后期初始化的属性和变量以供参考。
https://kotlinlang.org/docs/reference/properties.html
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |