Проверка наличия поля в базе данных реального времени Firebase - PullRequest
0 голосов
/ 07 ноября 2019

Я использую базу данных Firebase в своем приложении для Android. Это структура ребенка 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 ]

2 голосов
/ 07 ноября 2019

Как я могу проверить, существует ли поле, чтобы избежать исключения?

Существует два способа решения этой проблемы. Первый - проверить, существует ли свойство imageURL на существование:

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

. Или вы можете проверить поле imageURL на недействительность:

if(user.getImageURL() != null) {
    //Do your logic
}
1 голос
/ 07 ноября 2019

Вы получаете исключение, потому что переменная равна нулю, и вы пытаетесь проверить значение в этой строке.

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

Если у вас есть поле в вашей модели и это поле недоступно в firebase, тогда это будетвернуть ноль.

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...