【问题标题】:How to get a new firebase ID every time如何每次都获得一个新的 Firebase ID
【发布时间】:2021-04-28 02:54:11
【问题描述】:

我有一个将分数对象保存到 Firebase 实时数据库的应用。然后,下载该应用程序的任何人都可以检索所述项目。

我正在使用空间来自动生成乐谱的 ID。但是,一旦我添加了云服务,这种方法就会失败,因为不同设备的房间会生成相同的 ID,并且当从 firebase 下载到我的房间缓存中时,它们会发生冲突并相互覆盖。

为了解决这个问题,我打算使用 firebase 创建 ID,这样所有 ID 都可以来自同一个来源,因此应该不会发生冲突。

我在这里找到了几篇文章,详细介绍了如何从使用 firebase 数据库的推送事务中获取密钥。我可以在将密钥存储到 firebase 之前获取密钥并将其设置为分数项目,但是,当我尝试使其以这种方式工作时,我每次都会收到相同的推送密钥,从而重复我必须开始的相同问题。

    private fun saveScore(score: Score) {
    viewModelScope.launch(Dispatchers.IO) {

        // Write a message to the database
        val database =
            FirebaseDatabase.getInstance("https://winetraining-d6390-default-rtdb.firebaseio.com/")
        val firebaseRef = database.getReference("Scores")

        val newPostRef = firebaseRef.push()

        val key = newPostRef.key

        if (key != null) {
            score.id = key
        }

        firebaseRef.setValue(score)
    }
}

@Entity(tableName = "table_score")
data class Score(
    @PrimaryKey
    var id: String = "",

    @ColumnInfo(name = "name")
    var name: String,

    @ColumnInfo(name = "score")
    var score: Int,

    @ColumnInfo(name = "type")
    var type: Int
) {
    override fun toString(): String {
        return "Score{" +
                "score=" + score +
                ", name='" + name + '\'' +
                ", type=" + type +
                '}'
    }

    constructor() : this("","test-player",0,  -1)
}

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database android-room


    【解决方案1】:

    当您生成密钥时,您需要使用 setValue() 为该密钥设置一些值

     val newPostRef = firebaseRef.push()
     newPostRef.setValue(someValue) // set some value to the key
    

    请注意,任何 firebase 节点都应该是键/值对;没有值,键不会独立。

    您会注意到,如果您尝试在 Firebase 控制台上手动添加某个键,除非您设置相应的值,否则它不会被保留。

    【讨论】:

    • 我在调用 firebaseRef.setValue(score) 时这样做,你是说我需要 setValue 才能获取密钥?
    • 是的,您是在原始 firebase 节点上这样做的,而不是在 push() 创建的底层全新节点上这样做
    • 我终于明白了,结果是这样的:firebaseRef.push().apply { score.id = key.toString() setValue(score) } 感谢帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2015-09-15
    • 2020-06-30
    相关资源
    最近更新 更多