android - Firebase 数据库实时忽略了一些值
问题描述
我有一个 android 应用程序和 firebase 实时数据库。我有一个名为的类Game
,它具有下面描述的属性。最近我决定添加一个名为的新属性,likes
但是当我读取快照时,所有字段都被读取,除了新字段likes
为什么会有这种行为?
data class Game (
val id: String? = null,
val title: String? = null,
val release_date: String? = null,
val gender: String? = null,
val image: String? = null,
val description: String? = null,
val rating: Long? = null,
var likes: Long? = null,
var liked: Boolean? = null,
val video: String? = null,
val plataformas: String? = null
)
private val gamesVEL : ValueEventListener by lazy {
object : ValueEventListener{
override fun onCancelled(databaseError: DatabaseError) {}
override fun onDataChange(dataSnapshot: DataSnapshot) {
Log.d("firebase","jejejejje")
juegos.clear()
dataSnapshot.children.forEach {
val game = it.getValue(Game::class.java)
juegos.add(game!!)
}
queryStars.addListenerForSingleValueEvent(starsVEL)
}
}
}
更新
安装在新设备上可以解决问题,但不能在旧设备上安装。我的意思是,如果我在likes
仍然错过该字段之前安装了应用程序。
解决方案
我阅读了快照所有字段都已读取,除了新字段喜欢
仅当您在具有旧版本应用程序的设备上使用该应用程序时才会发生这种情况。
为什么会有这种行为?
发生这种情况是因为您的应用程序的早期版本不Game
包含包含该新添加likes
字段的类的更新版本。换句话说,旧版本只能读取和写入知道的属性。
要解决此问题,您应该将旧版本更新为新版本,以便它可以看到新添加的属性。
推荐阅读
- laravel - 将 Vue 变量或 Vue 组件返回给 Laravel Blade
- haskell - 模式匹配:使用占位符
- google-app-engine - 将数据从另一个 GCP 项目的 App Engine 搜索导入到 GCP 项目的 App Engine 搜索
- typescript - 打字稿循环遍历具有索引和值的字符串
- javascript - 未捕获的语法错误:使用 babel 编译后无法在模块外部使用 import 语句
- javascript - 用户离开页面之前的 JavaScript 确认,而不是页面加载
- c# - 视觉上的灰色区域
- sql - 打破行中的值
- project-reactor - 反应堆测试:SterVerifier.expectNoEvent() 没有按预期工作
- android - 生成签名包需要 gradle 版本 3.2.0 或更高版本