检查Firebase实时数据库中是否存在字段

时间:2019-11-07 09:10:05

标签: java android firebase firebase-realtime-database

我在Android应用中使用Firebase数据库。这是子Users的结构:

enter image description here

您可能会在图片中看到,有些项目的字段为imageURL,而其他项目的字段为imageURL

这是我的应用程序中的一部分代码,我从imageURL字段中获取值:

fuser = FirebaseAuth.getInstance().getCurrentUser();
        reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                com.mpidesarrollo.buju.Model.User user = dataSnapshot.getValue(User.class);
                username.setText(user.getUsername());


                if (user.getImageURL().equals("default")){
                    image_profile.setImageResource(R.mipmap.ic_launcher);
                } else {
                    Glide.with(getApplicationContext()).load(user.getImageURL()).into(image_profile);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

如果数据库中不存在imageURL字段,则在以下行出现异常:

if (user.getImageURL().equals("default")){

由于字段imageURL不存在而导致。

如何检查该字段是否存在以避免异常?

2 个答案:

答案 0 :(得分:2)

  

如何检查该字段是否存在以避免异常?

有两种方法可以解决此问题。第一个是检查imageURL属性是否存在:

if(dataSnapshot.child("imageURL").exists()) {
    //Do your logic
}

或者您可以检查imageURL字段是否为空:

if(user.getImageURL() != null) {
    //Do your logic
}

答案 1 :(得分:1)

由于变量为空,您将获得异常,并尝试检查此行上的值。

if (user.getImageURL().equals("default"))

如果您的模型中有字段,而该字段在Firebase中不可用,则它将返回null。

if(user.getImageURL()!=null) //checking field is available or not
{ 
    // imageURL exist in the database
    if (user.getImageURL().equals("default")){
                image_profile.setImageResource(R.mipmap.ic_launcher);
            } else {
                Glide.with(getApplicationContext()).load(user.getImageURL()).into(image_profile);
            }
}
else{
    // imageURL doesn´t exist in the database
}