Попытка получить данные из Firebase, но получить ноль - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь извлечь данные из базы данных Firebase и напечатать оператор в текстовом поле, но получаю нулевые значения. Я использую userid, чтобы попытаться добраться до нужного дочернего узла. Мое текстовое поле продолжает говорить "Добро пожаловать, ноль вошел как ноль" Моя база данных Firebase

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        final String uid;
        FirebaseUser user;


        user = FirebaseAuth.getInstance().getCurrentUser();
        uid = user.getUid();

        DatabaseReference reference = 
      FirebaseDatabase.getInstance().getReference("User");


         reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                fName = dataSnapshot.child(uid).child("fName").getValue(String.class);
                role = dataSnapshot.child(uid).child("role").getValue(String.class);

            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        welcomeText = (TextView) findViewById(R.id.welcomeText);
        welcomeText.setText("Welcome " + fName + "! You are logged-in as " + role);

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Вы должны передать свой userid как ребенка, чтобы получить данные только для вошедшего в систему пользователя. В настоящее время вы перебираете всех пользователей, которые в конце дают неверные данные. Попробуйте как показано ниже:

DatabaseReference reference = 
      FirebaseDatabase.getInstance().getReference("User").child(uid);

вместо

DatabaseReference reference = 
      FirebaseDatabase.getInstance().getReference("User");

Кроме этого, в настоящее время вы устанавливаете начальное значение fName и role, которое является нулевым, и никогда не обновляете значениес вашими пользовательскими данными, которые вы получаете внутри onDataChange. Итак, обновите ваш TextView внутри onDataChange.

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    fName = dataSnapshot.child("fName").getValue(String.class);
    role = dataSnapshot.child("role").getValue(String.class);

    welcomeText.setText("Welcome " + fName + "! You are logged-in as " + role);
}
1 голос
/ 20 октября 2019

Переместите следующие строки в метод обратного вызова onDataChange ().

welcomeText = (TextView) findViewById(R.id.welcomeText);
welcomeText.setText("Welcome " + fName + "! You are logged-in as " + role);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...