在加载数据之前,根据节点是否有子节点来更改Firebase引用

时间:2016-08-05 19:23:18

标签: android firebase firebase-realtime-database android-lifecycle

我想在我的孩子听众开始并加载我的数据之前设置我的Firebase参考。我知道onCreate超前于onResume但我的代码似乎与它相矛盾,因为我的引用仍然是我在onResume()中设置的。看起来我在onCreate中设置的内容并没有超出onCreate()之前的内容。

为什么?

我正在尝试从我的数据库中的模板中读取另一个节点是否还没有将用户注册为孩子。 任何提示都将不胜感激。

P.S。我已经注销了引用,并且登录OnResume()也是第一个。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.services_activity);


    app = FirebaseApp.getInstance();
    database = FirebaseDatabase.getInstance(app);
    auth = FirebaseAuth.getInstance(app);
    storage = FirebaseStorage.getInstance(app);
    username = auth.getCurrentUser().getUid();


    databaseRef = database.getReference("serv_hst");
    servTempltRef = database.getReference("serv_tmplt"); 

    databaseRef.child(username).addChildEventListener(new   ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            //I am trying to set my reference that I will use in OnResume() ..!!

            if (dataSnapshot.hasChildren()) {
                servTempltRef = database.getReference("serv_hst");
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
        });           
        }

@Override
protected void onResume() {
    super.onResume();


    servTempltRef.addChildEventListener(new ChildEventListener() {
        @Override        
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

1 个答案:

答案 0 :(得分:0)

仅当从Firebase数据库下载数据时,onChildAdded()内的代码才会异步执行。 那么,之后执行流将执行存在.addChildEventListener()方法的行,它将继续执行下一行... 在您的情况下,onCreate()没有其他行要执行。因此,由于Activity生命周期,onResume()方法将在没有您需要的数据的情况下执行。