3 java android abstract-class kotlin
我想出了以下问题:
我的MainActivity代码:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// ERROR: Cannot create instance of an abstract class
var db = DataBase().getDataBase(this)
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
房间数据库:
@Database(entities = arrayOf(DataBaseUser::class), version = 1)
abstract class DataBase : RoomDatabase() {
val DB_NAME : String = "DataBaseUser"
private lateinit var INSTANCE : DataBase
fun getDataBase(context: Context): DataBase {
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.applicationContext,DataBase::class.java,DB_NAME).build()
}
return INSTANCE
}
abstract fun getUserDao(): DataBaseUserDao
}
Run Code Online (Sandbox Code Playgroud)
我无法在Kotlin中实例化该类.在Java中,我这样做:
db = AppDataBase.getDataBase(view.getContext());
Run Code Online (Sandbox Code Playgroud)
如何在Kotlin中获得相同的结果?
使用单例(在Kotlin中object)来保存Room数据库实例:
@Database(entities = arrayOf(DataBaseUser::class), version = 1)
abstract class DataBase : RoomDatabase() {
abstract fun getUserDao(): DataBaseUserDao
}
object DatabaseProvider {
val DB_NAME : String = "DataBaseUser"
private lateinit var INSTANCE : DataBase
fun getDataBase(context: Context): DataBase {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.applicationContext,DataBase::class.java,DB_NAME).build()
}
return INSTANCE
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
val db = DatabaseProvider.getDataBase(view.getContext())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3754 次 |
| 最近记录: |