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

问题描述

我正在尝试获取内部类中的变量的值,该值被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);

//在这里,当我打印出用户名和服务名时,我得到 null

标签: javaandroidfirebasefirebase-realtime-database

解决方案


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

快速解决此问题的方法是仅在方法内部使用该结果,否则我建议您从这篇文章onDataChange()中查看我的 anwser 的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


推荐阅读