如何检查Firebase中的现有数据?

时间:2018-05-02 06:32:09

标签: android firebase firebase-realtime-database kotlin

enter image description here

上面的

是我的firebase节点树。 这是我的代码:

private fun attemptAdd(){
    var focus: View? = null
    var cancel: Boolean = false
    var prefix: String  = prePrefView.text.toString() + prefText.text.toString()
    var sp: SimPrefix

    //checks for the length of the input
    if(prefText.length()<2){
        prefText.error = "invalid length"
        cancel = true
        focus = prefText
    }

    mDatabaseReference.child("simnumbers")
            .orderByChild("simPref")
            .equalTo(prefix)
            .addListenerForSingleValueEvent(object : ValueEventListener{
                override fun onDataChange(dataSnapshot: DataSnapshot) {
                    dataSnapshot.children.forEach {
                        sp = it.getValue(SimPrefix::class.java)!!
                        if(sp.simCard.equals(prefix)){ //checks if there is already a node with the same data
                            prefText.error = "already exists"
                            cancel = true
                            focus = prefText
                        }
                    }
                }

                override fun onCancelled(p0: DatabaseError?) {

                }
            })

    if(cancel){
        focus?.requestFocus()
    }
    else{ //if all is valid, proceed to the next method.
        addPrefix()
    }
}

我在这里假设它似乎并不总是进入听众 进入下一个方法,允许用户输入相同的现有数据。

2 个答案:

答案 0 :(得分:1)

我提供了你可以改成kotlin的java代码,并将你的条件放入onDatachange方法..

     Query query1=reference.child(reference.getKey()).child("simnumbers").orderByChild("simPref").equalTo(prefix);
    query1.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // here place your condition
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

答案 1 :(得分:0)

请尝试以下方法检查数据是否存在:

  mDatabaseReference.child("simnumbers")
        .orderByChild("simPref")
        .equalTo(prefix)
        .addListenerForSingleValueEvent(object : ValueEventListener{
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                    if(dataSnapshot.exists()){
                dataSnapshot.children.forEach {
                    sp = it.getValue(SimPrefix::class.java)!!
                       }
                    }
                }
            }

            override fun onCancelled(p0: DatabaseError?) {

            }
        })

数据快照位于simnumbers,然后它将检查数据库中是否存在该快照,以及子simPref是否等于提供的值

  

public boolean exists ()

     

如果快照包含非空值,则返回true。

更多信息:

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#exists()