android - 模型 class android 架构中的房间数据库连接
android - room database connection in Model class android architecture
我是 MVVM 的新手,我也在使用 android 架构组件。
这是我的代码,我已经编写了在线部分,现在正在处理需要使用房间数据库的离线部分。
这是我的模型class代码:
class CategoryModel(
private val netManager: NetManager,
private val sharedPrefManager: SharedPrefManager
) {
var dateChanges: String = "null";
private lateinit var categoryDao: CategoryDao
private lateinit var dbConnection: DbConnection
fun getCats(): MutableLiveData<MutableList<Cat>> {
var list = MutableLiveData<MutableList<Cat>>();
if (netManager.isConnected!!) {
list = getCatsOnline();
} else {
list= getCatsOffline();
}
return list
}
这是 DbConnection class:
@Database(entities = arrayOf(Cat::class), version = 1)
abstract class DbConnection : RoomDatabase() {
abstract fun CategoryDao(): CategoryDao
companion object {
private var INSTANCE: DbConnection? = null
fun getInstance(context: Context): DbConnection? {
if (INSTANCE == null) {
synchronized(DbConnection::class) {
INSTANCE = Room.databaseBuilder(
context.getApplicationContext(),
DbConnection::class.java, Const.db_Name
).build()
}
}
return INSTANCE
}
fun destroyInstance() {
INSTANCE = null
}
}
问题是这样的,我需要与房间数据库建立连接并且它需要上下文。
我怎样才能建立这种联系?如何从 Model class 访问数据库?
如果您不想要与应用程序相关的模型,获取应用程序的简单方法,
首先实现自己的应用程序
class BaseApp : Application() {
companion object{
lateinit var INSTANCE:Application
}
override fun onCreate() {
super.onCreate()
INSTANCE = this
}
}
第二次使用:
DbConnection.getInstance(BaseApp.INSTANCE)
不要忘记在 AndroidManifest 中定义 BaseApp:
<application
android:name=".BaseApp"
...>
...
</application>
我是 MVVM 的新手,我也在使用 android 架构组件。
这是我的代码,我已经编写了在线部分,现在正在处理需要使用房间数据库的离线部分。
这是我的模型class代码:
class CategoryModel(
private val netManager: NetManager,
private val sharedPrefManager: SharedPrefManager
) {
var dateChanges: String = "null";
private lateinit var categoryDao: CategoryDao
private lateinit var dbConnection: DbConnection
fun getCats(): MutableLiveData<MutableList<Cat>> {
var list = MutableLiveData<MutableList<Cat>>();
if (netManager.isConnected!!) {
list = getCatsOnline();
} else {
list= getCatsOffline();
}
return list
}
这是 DbConnection class:
@Database(entities = arrayOf(Cat::class), version = 1)
abstract class DbConnection : RoomDatabase() {
abstract fun CategoryDao(): CategoryDao
companion object {
private var INSTANCE: DbConnection? = null
fun getInstance(context: Context): DbConnection? {
if (INSTANCE == null) {
synchronized(DbConnection::class) {
INSTANCE = Room.databaseBuilder(
context.getApplicationContext(),
DbConnection::class.java, Const.db_Name
).build()
}
}
return INSTANCE
}
fun destroyInstance() {
INSTANCE = null
}
}
问题是这样的,我需要与房间数据库建立连接并且它需要上下文。
我怎样才能建立这种联系?如何从 Model class 访问数据库?
如果您不想要与应用程序相关的模型,获取应用程序的简单方法,
首先实现自己的应用程序
class BaseApp : Application() {
companion object{
lateinit var INSTANCE:Application
}
override fun onCreate() {
super.onCreate()
INSTANCE = this
}
}
第二次使用:
DbConnection.getInstance(BaseApp.INSTANCE)
不要忘记在 AndroidManifest 中定义 BaseApp:
<application
android:name=".BaseApp"
...>
...
</application>