как хранить основную статистику D & D в моем приложении с использованием комнаты таким образом, чтобы ее можно было редактировать и извлекать - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь написать приложение для моей группы 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 в своем проекте, чтобы определить сущность, Дао и т. Д., И опубликую свой код, насколько далеко я продвинулся, однако я зашел в тупик моего понимания, пытаясь заставить его работать. Я пытаюсь сделать что-то как можно меньше и заставить это работать, а затем расширить его, чтобы сохранить статистику других персонажей.

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 голосов
/ 15 мая 2019

Знаете ли вы, что для доступа к DAO необходима RoomDatabase? Это может выглядеть примерно так:

@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>>

Пожалуйста, отметьте ответ как одобренный, если он работает для вас, или ответьте мне, если он не работает:)

0 голосов
/ 15 мая 2019

Я бы посоветовал вам переместить класс Entity и интерфейс 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{}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...