小编JJ *_*obs的帖子

“刷新”房间数据库提供的 LiveData 的最佳方式

我目前正在使用 Room 存储单词翻译列表,并将查询作为 LiveData 返回以监视插入和更新。然而,当我需要重新获取不同源语言的翻译时,我遇到了问题(我当前的策略是将实时数据重新分配给房间查询的结果)。

我使用以下 SQL 查询获取要翻译的语言以及特定语言的翻译

@Dao
interface TranslationDatabaseDao {
   ...

   //Returns all pairs of languages to translate to/from
   @Query("SELECT * FROM language_pairs")
   fun getAllLanguagePairs(): LiveData<List<LanguagePair>>

   //Returns translations with the specified source language
   @Query("SELECT * FROM translations WHERE sourceLanguage = :language")
   fun getTranslations(language: String): LiveData<List<TranslationResult>>

   ...
}
Run Code Online (Sandbox Code Playgroud)

我在实例化视图模型时调用它,并在用户更改语言时再次调用它(见changeLanguage(...)下文)。

class translationViewmodel(private val database: TranslationDatabaseDao, initLanguage: String): ViewModel() {
   ...

   val languages: LiveData<List<LanguagePair>> = database.getAllLanguagePairs()
   val currentLanguages = Transformations.map(languages) { allLanguages ->
      allLanguages?.let {
         it[0] //Get the first …
Run Code Online (Sandbox Code Playgroud)

android-lifecycle android-fragments kotlin android-room kotlin-coroutines

7
推荐指数
1
解决办法
3534
查看次数