Android 决定在firebase中创建新项目或更新旧项目

Android 决定在firebase中创建新项目或更新旧项目,android,firebase,firebase-realtime-database,kotlin,Android,Firebase,Firebase Realtime Database,Kotlin,我有两种方法,一种是创建一个新列表项,另一种是更新当前列表项 private fun addTarget() { val name = nameEditText?.text.toString().trim() val description = descriptionEditText?.text.toString().trim() if (!TextUtils.isEmpty(name)) { val id: String = databaseRefer

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

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() }
例如,在域中有一个方法
copyToRealmOrUpdate
,该方法查找
字段
,如果找到该字段,则更新该字段,如果没有,则创建一个新注释。在firebase我怎么能做这样的事情

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

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

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

如果您使用
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)

更新的问题,你能检查我的解决方案吗?你觉得怎么样?不,你应该先在数据库中检查元素的存在。你已经解决了这个问题,我可以帮你提供其他信息吗?