Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 等待firebase获取要继续移动的数据(Kotlin)_Android_Kotlin - Fatal编程技术网

Android 等待firebase获取要继续移动的数据(Kotlin)

Android 等待firebase获取要继续移动的数据(Kotlin),android,kotlin,Android,Kotlin,我想有一个函数,返回我从firebase获得的值,但异步编程让它变得非常困难。我希望能够等到(点数!=-500)。然而,每次我尝试等待时,它似乎也停止了从firebase获取积分值的任务 我可以将其硬编码为等待3秒,但我更愿意每半秒检查一次,以查看points值是否已更改,然后返回从数据库获得的值。我也知道我可以从我更改的文本视图中检索点,但我觉得这会中断我的应用程序的完整性 这是我正在使用的代码 getPoints() { var points= "-500"

我想有一个函数,返回我从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

}

同步执行不是一个选项,但可以使用来完成这一点:

ref.child("points").orderByValue().startAt("-500").endAt("500")
这只是有点难以确定,因为没有样本数据

我希望这至少会把你推向正确的方向。

我感谢你的快速反应。snapshot.child(“Points”).value.toString()将返回1到50之间的任意值(这是存储在数据库中的值)。因此,如果该Points值为“25”,我希望等待它从数据库中获取点,然后返回“25”。我想在某种程度上模拟一个同步动作。