问题
My firebase database structure looks like this:
I'm using this code but it doesn't retrieving any data from database and sometime the getUid()
produce NullPointerException. Can anyone help me to solve this problem?
mAuth = FirebaseAuth.getInstance();
mUser = mAuth.getCurrentUser();
userID = mUser.getUid();
mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
private void showData(DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()) {
UserInformation uInfo = new UserInformation();
uInfo.setFullName(ds.child(userID).getValue(UserInformation.class).getFullName());
uInfo.setUsername(ds.child(userID).getValue(UserInformation.class).getUsername());
uInfo.setEmail(ds.child(userID).getValue(UserInformation.class).getEmail());
fullNameProfile.setText(uInfo.getFullName());
usernameProfile.setText(uInfo.getUsername());
emailProfile.setText(uInfo.getEmail());
}
}
回答1:
To simply get user data from the database please use the following lines of code:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String email = dataSnapshot.child("Email").getValue(String.class);
String fullName = dataSnapshot.child("FullName").getValue(String.class);
String password = dataSnapshot.child("Password").getValue(String.class);
String userName = dataSnapshot.child("Username").getValue(String.class);
Log.d(TAG, userName);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
Or even simpler using a UserInformation
class:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserInformation uInfo = dataSnapshot.getValue(UserInformation.class);
Log.d(TAG, uInfo.getUsername());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
来源:https://stackoverflow.com/questions/54578292/how-to-retrieve-data-from-firebase-to-show-in-textview