【问题标题】:Decide to create a new item or update an old one in firebase决定在 firebase 中创建新项目或更新旧项目
【发布时间】:2019-03-21 15:33:12
【问题描述】:

我有两种方法,一种是创建一个新的列表项,另一种是更新当前的列表项。

private fun addTarget() {
    val name = nameEditText?.text.toString().trim()
    val description = descriptionEditText?.text.toString().trim()

    if (!TextUtils.isEmpty(name)) {
        val id: String = databaseReference?.push()?.key.toString()
        val target = Target(guid = id, name = name, description = description)
        databaseReference?.child(id)?.setValue(target)
    } else Log.d("some", "Enter a name")
}

private fun updateTarget() {
    val name = nameEditText?.text.toString().trim()
    val description = descriptionEditText?.text.toString().trim()

    val map = mapOf("name" to name, "description" to description)
    databaseReference?.child(arguments?.getString(KEY_TARGET_GUID, "") ?: "")?.updateChildren(map)
}

我需要把这两个概念分清楚,所以条件有问题。

button?.setOnClickListener { if (condition?????) addTarget() else updateTarget() }

例如,在 Realm 中有一个方法 copyToRealmOrUpdate 查找 field,如果找到它更新,如果没有,则 创建一个新笔记。我怎样才能在 Firebase 中做这样的事情?

接下来我解决了我的问题: 当我转到片段时,我从所有元素的列表中传递guid,如果它为空,则添加,如果不是则更新。

button?.setOnClickListener {
        if (arguments?.getString(KEY_TARGET_GUID, "").isNullOrEmpty()) addTarget()
        else updateTarget()
    }

我不知道这是一个好的解决方案。

【问题讨论】:

    标签: android firebase firebase-realtime-database kotlin


    【解决方案1】:

    如果您使用exist() 方法,这在 Firebase 中是可能的,如下代码行所示:

    val valueEventListener = object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()) {
                //Do the update
            } else {
                //Do the addition
            }
        }
    
        override fun onCancelled(databaseError: DatabaseError) {
            Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
        }
    }
    databaseReference.child("-LaVYDBpwiIcwhe9qz2H").addListenerForSingleValueEvent(valueEventListener)
    

    【讨论】:

    • 更新的问题,你能检查一下我的解决方案吗?你怎么看?
    • 不,你应该先在数据库中检查元素的存在。
    • 您的问题解决了吗,我可以帮助您了解其他信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多