无法检测'addChildEventListener()'下的dataSnapshot是否为null [英] Unable to detect if dataSnapshot is null or not under 'addChildEventListener()`

查看:354
本文介绍了无法检测'addChildEventListener()'下的dataSnapshot是否为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为我的应用程序和应用程序建立了一个Firebase数据库。它看起来像这样:

  app 
-category
-subCategory
-subSubCategory

我有一个 addChildEventListener()

pre $ m $ db $ p $ m $ db $ b public void onChildAdded(DataSnapshot dataSnapshot,String s){
if(dataSnapshot!= null){

} else {
Log.d(dataSnapshot,null );
}
}

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

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot){


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

}

@Override
pub (void)onCancelled(DatabaseError databaseError){

}
});

我想在数据库为空时向用户显示警报,所以我尝试删除数据库,然后它看起来像这样:

$ $ p $ code $ app $ null
code $

但即使现在行 Log.d(dataSnapshot,null);


$ b 编辑:

我加了

  mDatabase.child(category)。addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot!= null){
Log.d(dataSnapshot,AVAILABLE);
} else {
Log.d(dataSnapshot, NULL);
}
}

@Override
public void onCancelled(DatabaseError databaseError){

}
});

我得到了 D / dataSnapshot:AVAILABLE 打印出来。在数据库中没有数据的时候这怎么可能?

为什么会发生这种情况,以及当数据库为空时,如何显示用户警报?

解决方案

dataSnapshot 对象本身不会是。但可以通过调用 dataSnapshot.exists()来询问是否有任何数据。所以:

pre $ public $ onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot.exists()){
Log.d(dataSnapshot,AVAILABLE);
} else {
Log.d(dataSnapshot,NO DATA);
}
}


I have set up a Firebase database for my app & it looks like this:

app
 -category
  -subCategory
   -subSubCategory

I have an addChildEventListener() set up like this:

mDatabase.child("category").addChildEventListener(new ChildEventListener() {
        @Override   
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot != null) {

            } else {
                Log.d("dataSnapshot", "null");
            }
        }

        @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) {

        }
    });

I want to show an alert to user when the database is empty so I tried it by deleting everything in database and then it looked like this:

app: null

but even now the condition having line Log.d("dataSnapshot", "null"); is not getting called.

EDIT:

I added

mDatabase.child("category").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot != null) {
                    Log.d("dataSnapshot", "AVAILABLE");
                } else {
                    Log.d("dataSnapshot", "NULL");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

and I got D/dataSnapshot: AVAILABLE printed out. How is this possible when there is no data in the database?

Why is this happening and what can I do to show users alert when the database is empty?

解决方案

The dataSnapshot object itself will never be null. But you can ask if it's got any data, by calling dataSnapshot.exists(). So:

public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        Log.d("dataSnapshot", "AVAILABLE");
    } else {
        Log.d("dataSnapshot", "NO DATA");
    }
}

这篇关于无法检测'addChildEventListener()'下的dataSnapshot是否为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆