Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 安卓房间+;科特林模式_Kotlin_Android Room - Fatal编程技术网

Kotlin 安卓房间+;科特林模式

Kotlin 安卓房间+;科特林模式,kotlin,android-room,Kotlin,Android Room,AndroidRoom文档说,在实例化AppDatabase对象时,我们应该遵循单例设计模式 我正在考虑,我想知道是否建议将AppDatabase类放在我的应用程序类中。或者如果我可以用Kotlin singleton 假设我有一个名为CarroDAO的DAO和类CarrosDatabase,它是一个RoomDatabase 使用Kotlin对象/单例创建DatabaseManager类可以吗 object DatabaseManager { private var dbInstance

AndroidRoom文档说,在实例化AppDatabase对象时,我们应该遵循单例设计模式

我正在考虑,我想知道是否建议将AppDatabase类放在我的应用程序类中。或者如果我可以用Kotlin singleton

假设我有一个名为CarroDAO的DAO和类CarrosDatabase,它是一个RoomDatabase

使用Kotlin对象/单例创建DatabaseManager类可以吗

object DatabaseManager {
    private var dbInstance: CarrosDatabase

    init {
        val appContext = MyApplication.getInstance().applicationContext

        dbInstance = Room.databaseBuilder(
                appContext,
                CarrosDatabase::class.java,
                "mybd.sqlite")
                .build()
    }

    fun getCarroDAO(): CarroDAO {
        return dbInstance.carroDAO()
    }
}
所以我可以得到这样的DAO类:

val dao = DatabaseManager.getCarroDAO()

根据Android文档,我们可以使用singleton设计模式创建一个数据库实例,如下所示 创建房间数据库实体

@Entity
data class User(
    @PrimaryKey var uid: Int,
    @ColumnInfo(name = "first_name") var firstName: String?,
    @ColumnInfo(name = "last_name") var lastName: String?
)
创建DAO类

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE:  first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}
您可以通过以下代码获取数据库实例

 var databaseInstance=AppDatabase.getInstance(context)

我建议您使用依赖注入框架为您处理单例。这样,您就可以控制实例的生命周期。这是一个设计问题,而不是代码问题。看起来您很清楚如何创建一个单例以及替代方案是什么。使用单例是否是一个好主意的问题已经超出了这么做的范围。
 var databaseInstance=AppDatabase.getInstance(context)