public void loadUserInformation() {
final String uid = mAuth.getCurrentUser().getPhoneNumber();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users");
// DatabaseReference uidRef = rootRef.child("ref").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot: dataSnapshot.getChildren()){
String name=postSnapshot.child("Name").getValue().toString();
// String email=postSnapshot.child("Email").getValue().toString();
Name.setText(name);
// Email.setText(email);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getActivity(),"Error Loading UserDetails",Toast.LENGTH_LONG).show();
}
};
rootRef.addListenerForSingleValueEvent(eventListener);
}
我知道为什么我没有得到预期的结果,因为在用户之后还有一个孩子。我不确定如何访问它,孩子(uid)给了我一个NullPointerException
。目前的代码给了我一些随机用户的名字。我希望它返回经过身份验证的用户的名称,即我自己
数据库 - http://ibb.co/iRnF77
答案 0 :(得分:0)
将电话号码更改为用户ID:
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userid=user.getUid();
所以你将拥有这个数据库:
Users
userid
Name: namehere
Phone_Number: numberhere
//etc
然后你可以简单地检索当前用户的数据:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name=dataSnapshot.child("Name").getValue().toString();
Name.setText(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
您不需要将电话号码作为父节点,因为您已将其作为属性Phone_Number: number_here
使用,无需再写两次。
如果您进行了手机验证,也可以使用getPhoneNumber()
: