【发布时间】:2018-04-17 11:59:57
【问题描述】:
我有以下 Firebase 数据库:
- 根节点
- 用户节点
- 由 ref.push() 自动生成的密钥
- 属性
我正在尝试仅检索用户下单个孩子的属性之一。这是我的数据库的截图:
如果您查看屏幕截图,我只想检索电子邮件(假设我没有其他方法可以获取它)。但是,在代码中,我不知道包含我想要的电子邮件的 User 的孩子。这是我目前正在做的,但效率很低(此代码检查我当前的用户是否存在,如果不存在,它将他/她的数据添加到数据库中):
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) {
}
});
我试图将用户下的孩子设置为电子邮件,但火力基地不允许我在密钥中使用一些特殊字符。任何使代码更高效的建议将不胜感激。或者任何可以使查询更容易的关键建议都会很棒。
提前致谢
【问题讨论】:
-
你可以想一想 1)
sign up和login基于电子邮件和密码,已经firebase提供了这个功能,这对你来说会容易得多! -
好吧,如果您真的想将电子邮件 ID 作为键,绕过特殊字符的一种简单方法是对字符进行编码,例如 html 如何将 '
-
@kdblue 我正在这样做,但我想添加其他信息,例如年龄、生物兴趣...
-
@KaranModi 我想这会造成麻烦,但谢谢!
-
@CharbelHanna 是的,你可以! ,这是一个很好的方法!
标签: android firebase firebase-realtime-database