如何使用房间在我的应用程序中存储基本的D&D统计信息,以便可以对其进行编辑和检索

时间:2019-05-15 07:44:08

标签: android kotlin android-room

我正在尝试为我的D&D组编写一个应用程序,其中一项功能是存储组的字符统计信息,并将其显示在该应用程序中。

我去了以下教程和文档,尝试并学习如何做, https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin/#0 https://developer.android.com/training/data-storage/room/defining-data.html https://developer.android.com/guide/topics/data/data-storage 我掌握了基础知识,并在项目中创建了一个新的kotlin文件来定义实体,Dao等,并将代码发布到现在为止,但是我对尝试使其工作陷入僵局。我正在尝试做尽可能少的事情并使它工作,然后将其扩展以存储其他字符统计信息。

stats.kt

package com.taylorworld.tw01

import androidx.lifecycle.LiveData
import androidx.room.*

@entity (tablename = "stat_table")
data class Stats(
    @ColumnInfo(name = "stat") val stat: string,
    @PrimaryKey val num: Int)
)

@Dao
interface StatDao {
    @Query("SELECT stat from stat_table")
    fun getStats(): LiveData<<List<Stats>

    @Insert
    suspend fun insert(stat: Stats)
}
@Abstract val statDao: StatDao{}

当我尝试编译项目时,出现以下错误消息。 https://imagebin.ca/v/4h9cpZurjoA2

2 个答案:

答案 0 :(得分:0)

我建议您将实体类和Dao接口移到其他类上。

package com.taylorworld.tw01

import androidx.lifecycle.LiveData
import androidx.room.*
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity (tableName = "stat_table")
data class Stats(
    @ColumnInfo(name = "stat") val stat: String,
    @PrimaryKey val num: Int)

@Dao
interface StatDao {
    @Query("SELECT stat from stat_table")
    fun getStats(): LiveData<List<Stats>>

    @Insert
    suspend fun insert(stat: Stats)

    @Abstract val statDao: StatDao{}
}

答案 1 :(得分:0)

您是否知道需要RoomDatabase才能访问DAO?它可能看起来像这样:

@Database(
  entities = [(Stats::class)],
  version = 1,
  exportSchema = false
)
abstract class DDDatabase : RoomDatabase() {

  abstract fun statDao(): StatDao

  private var inst: DDDatabase? = null
  private val instLock = Object()

  fun getInstance(context: Context): DDDatabase = inst ?: synchronized(instLock) {
    return inst ?: run {
      inst = Room.databaseBuilder(
        context,
        DDDatabase::class.java, "name of the database"
      ).build()
      inst!!
  }
}

}

但是我使用applicationContext而不是注入上下文。然后,您可以稍后按以下方式使用它:

DDDatabase.getDatabase().statDao().getStats()

但是,我发现您的getStats查询结构不正确。如果您希望数据库中的所有统计信息都应写为:

@Query("SELECT * from stat_table")
    fun getStats(): LiveData<List<Stats>>

如果答案适合您,请标记为已批准;否则,请与我联系:)