【问题标题】:My var value doesn't update on first "click"我的 var 值不会在第一次“点击”时更新
【发布时间】:2020-11-10 02:15:36
【问题描述】:

我有下一个代码:

private fun conectarProfesor() {

      databaseReference.child("User").orderByChild("correo").equalTo(correoEditText.text.toString()).addValueEventListener(object :
            ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {
                Toast.makeText(baseContext, "Failed to load post.",
                    Toast.LENGTH_SHORT).show()
            }

            override fun onDataChange(dataSnapshot: DataSnapshot) {

                existe = false
                listaNombresProfesores.clear()

                for (ListaProfesores in dataSnapshot.children) {


                    var profesor = ListaProfesores.getValue(User::class.java)
                    System.out.println(profesor!!.tipo)
                    if (profesor!!.tipo == "profesor") {
                        System.out.println("TRUEEE")  **->>> THIS WORKS!!!**
                        existe = true
                    }
                    else{
                        existe = false
                    }
                }
            }
        })

    }

然后,我评估 var "existe"... 我不知道为什么正确的值会有一键延迟,

"System.out.println("TRUEEE")" 工作正常,但仅在下次单击时更新值。

泰!

【问题讨论】:

    标签: android android-studio kotlin boolean onclicklistener


    【解决方案1】:

    您正在遍历 dataSnapshot 中的子项:

                    for (ListaProfesores in dataSnapshot.children) {
    
    
                    var profesor = ListaProfesores.getValue(User::class.java)
                    System.out.println(profesor!!.tipo)
                    if (profesor!!.tipo == "profesor") {
                        System.out.println("TRUEEE")  **->>> THIS WORKS!!!**
                        existe = true
                    }
                    else{
                        existe = false
                    }
                }
    

    我怀疑,可能存在这样一种情况,在最后一次迭代中 profesor!!.tipo != "profesor" 并因此将 existe 设置为 false

    如果您在满足条件并将existe 设置为true 时立即跳出for 循环,那么会有什么效果。

                    for (ListaProfesores in dataSnapshot.children) {
    
    
                    var profesor = ListaProfesores.getValue(User::class.java)
                    System.out.println(profesor!!.tipo)
                    if (profesor!!.tipo == "profesor") {
                        System.out.println("TRUEEE")  **->>> THIS WORKS!!!**
                        existe = true
                        break
                    }
                    else{
                        existe = false
                    }
                }
    

    【讨论】:

    • Ty 的答案,但我认为问题是 onDataChange 的延迟...我评估 var 的代码部分在之后,它在运行时之前执行...终于我解决了问题。
    猜你喜欢
    • 2018-02-04
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多