繁体   English   中英

房间数据库 - 将“整个 pojo 模式”添加到数据库中,而不是我想要的数据

[英]Room database - adding "whole pojo schema" into the database, instead of the data I want

我尝试按照一些房间教程进行操作,并想在微调器中显示数据库中的数据,但我有一些奇怪的 output。 我怎样才能添加我想要的数据,而不是这个奇怪的模式?

我可以在微调器中看到什么

CurrencyDatabaseModel(currency=USD)
CurrencyDatabaseModel(currency=EUR)

等等。

我想得到什么

EUR
USD
...

货币数据库模型

    @Entity(tableName = "currencies")
data class CurrencyDatabaseModel(
    @PrimaryKey @ColumnInfo(name = "currency_name") val currency: String
)

    @Dao
interface CurrencyDAO {

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insertNewCurrency(databaseModel: CurrencyDatabaseModel)

    @Query("SELECT * FROM currencies ORDER BY currency_name")
    fun getAllCurrencies(): Flow<List<CurrencyDatabaseModel>>
}

存储库

    class CurrencyDatabaseRepository(private val currencyDAO: CurrencyDAO) {

    val allCurrencyNamesModel: Flow<List<CurrencyDatabaseModel>> = currencyDAO.getAllCurrencies()

    @Suppress("RedundantSuspendModifier")
    @WorkerThread
    suspend fun insertNewCurrency(currencyDatabaseModel: CurrencyDatabaseModel){
        currencyDAO.insertNewCurrency(currencyDatabaseModel)
    }
}

视图模型

class CurrencyDatabaseViewModel(private val currencyDatabaseRepository: CurrencyDatabaseRepository) :
ViewModel() {

    val currencyNames = mutableListOf<CurrencyDatabaseModel>()

    val allCurrencies: LiveData<List<CurrencyDatabaseModel>> = currencyDatabaseRepository.allCurrencyNamesModel.asLiveData()
}


class CurrencyDatabaseFactory(private val currencyDatabaseRepository: CurrencyDatabaseRepository) :
    ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if(modelClass.isAssignableFrom(CurrencyDatabaseViewModel::class.java)){
            @Suppress("UNCHECKED_CAST")
            return CurrencyDatabaseViewModel(currencyDatabaseRepository) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class DB")
    }
}

所以这基本上是正在发生的事情以及你的代码是如何工作的:

  1. 您将数据添加到微调器中。
  2. 微调器调用toString() function 数据 class CurrencyDatabaseModel()
  3. 看起来像这样:
@Entity(tableName = "currencies")
data class CurrencyDatabaseModel(
    @PrimaryKey
    @ColumnInfo(name = "currency_name")
    val currency: String
) {
    override fun toString(): String {
        return super.toString()
    }
}

这就是你的问题的原因。

尝试更改数据 class 如下:

@Entity(tableName = "currencies")
data class CurrencyDatabaseModel(
    @PrimaryKey
    @ColumnInfo(name = "currency_name")
    val currency: String
) {
    override fun toString(): String {
        return this.currency
    }
}

我相信这应该可以解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM