android-模型类android体系结构中的会议室数据库连接

时间:2019-04-28 04:52:21

标签: android android-room android-architecture-components android-viewmodel android-mvvm

我是MVVM的新手,我也在使用android体系结构组件。

这是我的代码,我编写了在线部分,现在我正在处理需要使用room数据库的离线部分。

这是我的模型类代码:

    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类:

@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类访问数据库?

1 个答案:

答案 0 :(得分:1)

如果您不想与应用程序相关的模型,则轻松获得应用程序,

首先实现自己的应用程序

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>