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