我有两种方法,一种是创建新列表项,第二种是更新当前列表项。
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
寻找field
,如果找到了它,则更新,如果没有,则创建一个新的注意。我该如何在Firebase中做类似的事情?
我接下来解决了我的问题:
当我转到片段时,我从所有元素的列表中传递guid
,如果它为空,则添加,如果不添加则更新。
button?.setOnClickListener {
if (arguments?.getString(KEY_TARGET_GUID, "").isNullOrEmpty()) addTarget()
else updateTarget()
}
我不知道这是一个很好的解决方案。
答案 0 :(得分: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)