Java 如何查找Firebase中是否存在字段中具有特定值的子项?
我需要找出Firebase中是否存在一个字段中具有特定值的子项 以下是我的数据库结构:Java 如何查找Firebase中是否存在字段中具有特定值的子项?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我需要找出Firebase中是否存在一个字段中具有特定值的子项 以下是我的数据库结构: 要检查字段是否存在,可以执行以下操作: DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2"); ref.addValueEventListener(new ValueEventListener(){ @Override public vo
要检查字段是否存在,可以执行以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2");
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
//then it exists
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
这将检查
数据库中存在ChildBdxCatalCdRjCizzCufJo3YRjF2
如果您这样做:
ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2").orderByChild("chat_id").equalTo(chatid);
然后,它将检查数据库中是否也存在该子级当您进行引用并拥有DataSnapshot时,您可以这样检查它:
yourref.child("chat_id").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
//Do something
}
}
存在
如果快照包含非空值,则返回true
如果此DataSnapshot包含任何数据,也将返回true。它比使用DataSnapshot.getValue稍有效率!==空。在您的情况下,您可以设置如下查询:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.orderByChild("chat_id").equalTo("CHAT_ID_To_COMPARE");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual object
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这将在服务器端过滤您的数据,而无需在应用程序端过滤数据。etEmail是一个编辑文本
我这么做是为了userEmail的价值。。。因为除了电子邮件,我没有任何用户名
对于这样的结构
"users": {
pushId: {
"userEmail": {
}
}
}
一次创建
etEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(final CharSequence s, int start, int before, int count) {
//yourFunction();
DatabaseReference databaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
databaseUsers.orderByChild("userEmail").equalTo(String.valueOf(s))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual object
//User email already exists
//do something
//return; stops the function from executing further
return;
}
} else {
// email doesn't exists.
// do something
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void afterTextChanged(Editable s) {
}
});
etEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(final CharSequence s, int start, int before, int count) {
//yourFunction();
DatabaseReference databaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
databaseUsers.orderByChild("userEmail").equalTo(String.valueOf(s))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual object
//User email already exists
//do something
//return; stops the function from executing further
return;
}
} else {
// email doesn't exists.
// do something
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void afterTextChanged(Editable s) {
}
});