使用Android有效地从Firebase数据库中检索数据



我有一个包含以下内容的Firebase数据库:

  • 根节点
  • 用户节点
  • 由 ref.push() 自动生成的密钥
  • 属性

我试图只检索用户下单个孩子的一个属性。这是我的数据库的屏幕截图:

我的数据库的屏幕截图

如果您检查屏幕截图,我只想检索电子邮件(假设我没有其他方法可以获取它)。但是,在代码中,我不知道包含我想要的电子邮件的用户的子项。这是我目前正在做的事情,但它的效率非常低(此代码检查我当前的用户是否存在,如果不存在,它将他/她的数据添加到数据库中):

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("User");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child:children) {
User user1 = child.getValue(User.class);
Log.d("kharas email",user1.getEmail()+"");
if(!user1.getEmail().equals(firebaseAuth.getCurrentUser().getEmail())){
GraphRequest.newMeRequest(token, new GraphRequest.GraphJSONObjectCallback() {
String birthday = "Not Available";
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
User userInfo = new User();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("User");
birthday = object.has("email")+"";
userInfo.setBirthday(birthday);
userInfo.setEmail(firebaseAuth.getCurrentUser().getEmail());
ref.push().setValue(userInfo);
}
}).executeAsync();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

我尝试将用户下的孩子设置为电子邮件,但 firebase 不允许我在密钥中使用一些特殊字符。任何使代码更有效的建议将不胜感激。或者任何可以使查询更容易的关键建议都会很棒。

提前致谢

而不是放置随机值或自动生成的密钥,您可以添加从火力基地接收user's id

firebaseAuth.getCurrentUser().getUid()

这将更容易访问并且更有效,因为无论何时登录,您都会有这个user_id,并且对应于您可以获取电子邮件user_id而不是检查数据库中的所有值

如果您不知道随机键,检索电子邮件的唯一方法是:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("User");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){                            for (DataSnapshot child:children) {
String email=datas.child("email").getValue().toString();
} 
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

或者,您可以使用 Firebase 身份验证并在Users下添加用户 ID,而不是push()然后检索用户 ID :

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userid=user.getUid();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("User");
ref.child(userid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String email=dataSnapshot.child("email").getValue().toString();
} 
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

这样你就不必循环了。

最新更新