【问题标题】:@PropertyName not working in Kotlin with Firestore@PropertyName 不能在带有 Firestore 的 Kotlin 中工作
【发布时间】:2020-07-08 17:22:07
【问题描述】:

我在使用 Firestore 时遇到问题,因为数据类完全忽略了 @PropertyName。

import com.google.firebase.database.PropertyName




data class Profile(
    @get:PropertyName("player_uuid")
    @set:PropertyName("player_uuid")
    @PropertyName("player_uuid")
    var playerUuid: String? = null,
   }

我尝试了所有注释组合,但似乎都不起作用,因为当我从服务器获取播放器 Uuid 时,它总是为空。

我如何解析对象 -

FirebaseFirestore.getInstance().document("profile/$id").get().await().toObject(Profile::class.java)

当我设置文档时也会发生同样的事情

FirebaseFirestore.getInstance().document("profile/$id").set(profile).await()

在 firebase 控制台上,我将发送 playerUuid 而不是 player_uuid。

【问题讨论】:

  • 请编辑问题以显示添加 @PropertyName 的导入
  • @DougStevenson 完成

标签: android firebase kotlin serialization google-cloud-firestore


【解决方案1】:

您为 Firestore 使用了错误的导入。您现在拥有的是实时数据库。请改用import com.google.firebase.firestore.PropertyName

【讨论】:

  • 只有 PropertyName 就够了,还是我必须同时提供 get: 和 set: 注释?
  • 我不记得曾经使用过 get 和 set,但话又说回来,我在使用 PropertyName 时可能只使用过 Java。那是几年前的事了。在 Java 中,我认为您只需要注释 getter。
【解决方案2】:

您必须将@Keep 添加到您的班级。或者 Proguard 将重命名变量 如果字段名称是变量名称,请检查 firestore 数据库

@Keep
data class Profile(
@get:PropertyName("player_uuid")
@set:PropertyName("player_uuid")
var playerUuid: String? = null)

【讨论】:

  • 我没有使用 proguard。
猜你喜欢
  • 2019-09-27
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多