首页 > 解决方案 > 在 Kotlin 中实例化 Room 数据库的正确方法

问题描述

我正在用 Kotlin 编写我的第一个 Android 应用程序。我想知道如何实例化一个房间持久性数据库,以便我可以从许多不同的活动中访问它。抱歉,如果我的问题很愚蠢且不太具体,但我不确定哪些细节可能有用。

标签: androidkotlinandroid-room

解决方案


试试这种方式.. 像下面这样进行应用程序级别的活动以创建数据库。

class AppActivity:Application() {
companion object {
    var db: AppDatabase? = null
    fun getDatabase(): AppDatabase? {
        return db
    }

}
override fun onCreate() {
    super.onCreate()
    db= Room.databaseBuilder(applicationContext, AppDatabase::class.java,"DB").allowMainThreadQueries().build()
}

}

之后,此活动在应用程序标记的清单中定义..

        android:name=".app.AppActivity"

之后做道课..

@Dao
interface TodoDao {
@Query("SELECT * FROM Todo")
fun getTodoData()= mutableListOf<Todo>()

@Insert
fun insertTodo(todo: Todo)

@Update
fun updateTodo(todo: Todo)

@Delete
fun deleteTodo(todo: Todo)

}

制作数据库类以访问所有 dao 类..

@Database(entities = arrayOf(User::class,Assignment::class,Todo::class,   Student::class,Event::class,Comment::class,Feedback::class ,Achivement::class,Note::class, Syllabus::class, Education::class, Mark::class, UserWork::class, Exam::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun getUser(): UserDao
abstract fun getStudent(): StudentDao
abstract fun getEducationDao(): EducationDao
abstract fun getWorkDetails(): UserWorkDao
abstract fun getExamDao(): ExamDao
abstract fun getMarkDao(): MarkDao
abstract fun getSyllabusDao(): SyllabusDao
abstract fun getNoteDao(): NoteDao
abstract fun getAchivement():AchivementDao
abstract fun getFeedbackDao():FeedbackDao
abstract fun getCommentDao():CommentDao
abstract fun getEventDao():EventDao
abstract fun getAssignDao():AssignmentDao
abstract fun getTodoDao():TodoDao
 }

为待办事项制作表格..

@Entity
class Todo {
@PrimaryKey(autoGenerate = true)
var id:Int=0
var time:String=""
var activityName:String=""
var hours:String=""
var types:String=""

}

在活动或片段插入数据之后,如下所示..

  var data=Todo().apply {
                time=mSpTime?.selectedItem.toString()
                types=mSpTypes?.selectedItem.toString()
                activityName=mEtAname?.text.toString().trim()
                hours=mEtHour?.text.toString().trim()
          }
   AppActivity.getDatabase()?.getTodoDao()?.insertTodo(data)

推荐阅读