是我的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()
}
}
我在这里假设它似乎并不总是进入听众 进入下一个方法,允许用户输入相同的现有数据。
答案 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。
更多信息: