How to retrieve data from Firebase to show in TextView? [closed]

好久不见. 提交于 2021-01-26 02:39:09

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!