我使用firebase来创建带有邮件和密码的用户,但是在注册之后,我将他们转发到一个新的活动中,以便选择需要唯一的用户名。我的想法是搜索整个DB,以查看该用户名是否已经存在。我就是这么做的,但到现在还没有运气:
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("UserName", "Click: ");
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS");
mDatabase.orderByChild("username").equalTo("name1").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
//Here you can get all data
Log.d("UserName", "onDataChange: "+snapshot.toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});我也试过这个:
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("UserName", "Click: ");
DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
Query query = mFirebaseDatabaseReference.child("USERS").orderByChild("username").equalTo("name1");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//TODO get the data here
Log.d("UserName", "onDataChange: " + dataSnapshot.toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
query.addValueEventListener(valueEventListener);
}
});

发布于 2017-09-08 11:06:39
您的代码不能工作的唯一原因是"username“不是用户表的直接子表。您的直接子类将具有随机ids,您可以像这样使用ChildEventListener来迭代这些ids:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS");
mDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
User user = dataSnapshot.getValue(User.class); // pojo
if(user.getUsername().equals("name1") {
// do something
}
}
...
)https://stackoverflow.com/questions/46114564
复制相似问题