我目前正在使用 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