首页 > 解决方案 > 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仍然错过该字段之前安装了应用程序。

标签: androidfirebasefirebase-realtime-databasekotlin

解决方案


我阅读了快照所有字段都已读取,除了新字段喜欢

仅当您在具有旧版本应用程序的设备上使用该应用程序时才会发生这种情况。

为什么会有这种行为?

发生这种情况是因为您的应用程序的早期版本不Game包含包含该新添加likes字段的类的更新版本。换句话说,旧版本只能读取和写入知道的属性。

要解决此问题,您应该将旧版本更新为新版本,以便它可以看到新添加的属性。


推荐阅读