Не удается преобразовать объект типа java .lang.String в тип com.rafaquarta.whatsapp.model.Usuario - PullRequest
1 голос
/ 22 января 2020

Программа бегло работает при запуске, но после того, как я по ошибке удалил базу данных, началась ошибка. Неужели я не понимаю почему? Код ошибки

 Process: com.rafaquarta.whatsapp, PID: 6886
    com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.rafaquarta.whatsapp.model.Usuario
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@19.2.0:435)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.2.0:231)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.2.0:79)
        at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.2.0:203)
        at com.rafaquart

И код, с которым я столкнулся с проблемой:

 valueEventListenerContatos = usuariosRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                limparListaContatos();

                for(DataSnapshot dados: dataSnapshot.getChildren()){


                    Usuario usuario = dados.getValue(Usuario.class);

                    String emailUsuarioAtual = usuarioAtual.getEmail();
                    if(!emailUsuarioAtual.equals(usuario.getEmail())){
                        listaContatos.add(usuario);
                    }

                }

                adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

В этом коде я сталкиваюсь с ошибкой в ​​

Usuario usuario = dados.getValue(Usuario.class);

База данных :

Если кто-нибудь знает какое-либо решение, пожалуйста, помогите. Я нахожусь в ситуации здесь. Почему ошибку я не понимаю. Я проверил com.google.firebase.database.DatabaseException: не могу преобразовать объект типа java .lang.String в тип models.firebase.FirebaseTripDataHolder

и этот ссылка

Если кто-нибудь знает какое-либо решение, пожалуйста, помогите мне.

Ответы [ 4 ]

1 голос
/ 22 января 2020

например в вашей базе данных

 {
 'account':{
       'user':{

                 'id0':{//some data here    
                      },
                 'id1'{},
               }
            }
  }

сейчас, может быть, вы ссылаетесь на учетную запись , и вы получите String, что означает user , но вам нужно id .

Поэтому, если вы измените его с Userio.class на String.class и отладите полученную дочернюю строку, вы получите представление о том, какой дочерний элемент актуален для вашей модели. И позже вы меняете от String.class до Userio.class с соответствующим дочерним элементом.

В деталях;

usuariosRef - это ваша базовая ссылка.

Например,

вы usuariosRef ссылка с счетом ребенок. Внутри учетная запись существует пользователь дочерний, Здесь вы можете видеть только одну существующую строку, которая является пользователем . Таким образом, вы получаете строку из firebase. Но вам нужен идентификатор . Вам нужна справочная база данных с пользователем , так что вы можете получить id mean usuariosRef .

1 голос
/ 22 января 2020

Попробуйте это

 FirebaseDatabase firebaseDatabase=  FirebaseDatabase.getInstance();
 usuariosRef= firebaseDatabase.child("usuarios")

, тогда вы звоните addValueEventListener для usuariosRef. В настоящее время вы можете addValueEventListener указать неверное местоположение и поэтому оно возвращает String

1 голос
/ 22 января 2020

Измените это:

                for(DataSnapshot dados: dataSnapshot.getChildren()){


                    Usuario usuario = dados.getValue(Usuario.class);

                    String emailUsuarioAtual = usuarioAtual.getEmail();
                    if(!emailUsuarioAtual.equals(usuario.getEmail())){
                        listaContatos.add(usuario);
                    }

                }

на это:

 Usuario usuario = dataSnapshot.getValue(Usuario.class);

String emailUsuarioAtual = usuarioAtual.getEmail();
if(!emailUsuarioAtual.equals(usuario.getEmail())){
     listaContatos.add(usuario);
  }
 }

Удалите для l oop, так как при выполнении итерации вы получаете данные типа String, и в своем коде вы пытаетесь отобразить полученные данные в ваш класс pojo.

1 голос
/ 22 января 2020

Usuario usuario = dados.getValue (Usuario.class);

В этой строке вы получаете строковые данные из firebse, но вы пытаетесь получить как Userio.class

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

Потому что я думаю, что вы ссылаетесь на базу данных на основе Firebase неправильно, я имею в виду ссылку на неправильный сбор ребенка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...