Решите создать новый элемент или обновить старый в Firebase - PullRequest
1 голос
/ 21 марта 2019

У меня есть два метода, в одном я создаю новый элемент списка, во втором я обновляю текущий элемент списка.

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()
    }

Я не знаю, как это хорошее решение.

1 Ответ

1 голос
/ 21 марта 2019

Это возможно в Firebase, если вы используете метод exist(), как в следующих строках кода:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...