#android #kotlin
#Android #kotlin
Вопрос:
Я хочу иметь функцию, которая возвращает значение, которое я получаю от firebase, но асинхронное программирование делает это очень сложным. Я хочу иметь возможность ждать, пока (очки! = -500). Однако каждый раз, когда я пытаюсь подождать, кажется, что задача получения значения очков из firebase также останавливается.
Я могу жестко запрограммировать его на ожидание 3 секунды, но я бы предпочел проверять каждые полсекунды, чтобы увидеть, изменилось ли значение points, а затем возвращать значение, которое я получил из базы данных. Я также знаю, что могу извлекать точки из текстового представления, которое я изменил, но я чувствую, что это нарушает целостность моего приложения.
Вот код, с которым я работаю
getPoints() {
var points= "-500"
val ref = FirebaseDatabase.getInstance().getReference("Edit").child(storeName).child(
FirebaseAuth.getInstance().currentUser!!.uid
)
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
points= snapshot.child("points").value.toString()
pointsNumberTextView.text = points
}
override fun onCancelled(error: DatabaseError) {
Toast.makeText(context, "Err 11 Database reach cancelled", Toast.LENGTH_LONG).show()
}
})
//wait until (points != 500) then return points
}
Ответ №1:
Синхронное выполнение не является вариантом, но для этого можно использовать a Query
:
ref.child("points").orderByValue().startAt("-500").endAt("500")
Просто немного сложно сказать наверняка, потому что нет образцов данных;
я надеюсь, что это, по крайней мере, должно подтолкнуть вас в правильном направлении.
Комментарии:
1. Я ценю быстрый ответ. Снимок.дочерний элемент («Точки»).значение. toString() вернет значение от 1 до 50 (то есть то, что будет сохранено в базе данных).
2. Поэтому, если это значение очков было «25», я бы хотел подождать, пока оно не получит очки из базы данных, а затем вернет «25». Я как бы хочу имитировать синхронное действие в некотором роде.