Я получаю "ноль", когда я пытаюсь получить доступ к переменной из внутреннего класса в методах Firebase - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь получить значение переменной, которая находится во внутреннем классе, которая была переопределена firebase "addValueEventListener" , но когда я пытаюсь распечатать значение вне этих методов, я всегда получаю"НОЛЬ".Это мой код:

DatabaseReference reff = database.getReference().child("Users").child(userId);

                    reff.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            User r= dataSnapshot.getValue(User.class);
                           username= r.getUserN();

// когда я пытаюсь распечатать значение имени пользователя, здесь появляется

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                    DatabaseReference ref = database.getReference().child("service").child(b);
                    ref.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Service s = dataSnapshot.getValue(Service.class);

                            servicename=s.getNomservice();

// то же самое, что и имя пользователя, я получаю значение

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                    rv = new Rv(username,servicename,dt,tm);
                    RVId = myRef.push().getKey();
                    myRef.child(RVId).setValue(rv);

// и здесь, когда я распечатываю имя пользователя и имя сервера, я получаю ноль

1 Ответ

0 голосов
/ 28 мая 2018

Вы не можете использовать что-то, что еще не было загружено.Другими словами, вы не можете просто использовать username вне метода onDataChange(), потому что это всегда будет null из-за асинхронного поведения этого метода.Это означает, что к тому времени, когда вы пытаетесь распечатать этот результат вне этого метода, данные еще не закончили загрузку из базы данных, и поэтому они недоступны.

Быстрое решение этой проблемы -используйте эти результаты только внутри метода onDataChange(), в противном случае я рекомендую вам увидеть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью пользовательскогоПерезвоните.Вы также можете взглянуть на это видео для лучшего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...