当我尝试从firebase方法中的内部类访问变量时,我得到“null”

时间:2018-05-27 18:43:51

标签: java android firebase firebase-realtime-database

我正在尝试获取内部类中的变量的值,该值被firebase “addValueEventListener”覆盖,但是当我尝试打印出这些方法之外的值时,我总是得到“NULL”。这是我的代码:

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 :(得分:0)

您现在无法使用尚未加载的内容。换句话说,您不能简单地使用username方法之外的onDataChange(),因为此方法的异步行为始终为null。这意味着当您尝试在该方法之外打印该结果时,数据尚未从数据库中完成加载,这就是无法访问的原因。

快速解决此问题的方法是仅在onDataChange()方法中使用该结果,否则我建议您从 post 中查看我的anwser的最后一部分我在其中解释了如何使用自定义回调来完成它。您还可以查看此 video ,以便更好地理解。