2017-06-20 1 views
0

Quand je lance le code ci-dessous, je reçois l'erreur suivante:Firebase POJO ne fonctionne pas, ne reconnaissant pas la classe que j'essaie de jeter à

com.google.firebase.database.DatabaseException: Class java.util.HashMap has generic type parameters, please use GenericTypeIndicator instead.

seniorRef.orderByChild("seniorID").equalTo(caretaker.getSeniorID()) 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot data : dataSnapshot.getChildren()) { 

       Log.d("senior", data.toString()); 
       Senior senior = data.getValue(Senior.class); 
       seniorBox.setText(senior.getFirstName() + " " + senior.getLastName()); 
       caretasks(senior); 
      } 
     } 

Ce qui est bizarre est que ce code fonctionnait parfaitement depuis très longtemps et j'ai apporté des changements mineurs à la classe Senior (ci-dessous) pour les choses sur lesquelles je travaille actuellement. Ça fonctionnait quand j'ai fait quelques progrès la nuit dernière mais maintenant il refuse de le convertir d'une HashMap en Senior. Si je tente de le convertir en tant que (Senior) data.getValue(), il génère une erreur de conversion de type. S'il vous plaît laissez-moi savoir ce que je fais mal.

public class Senior implements Serializable { 

private String seniorID; 
private String firstName; 
private String lastName; 
private String address; 
private HashMap<String, HashMap> activities; 

public Senior(){} 

... 

} 

Edit: Il est également intéressant de mentionner que j'ai une autre classe qui fait exactement la même requête sur un même objet, ce qui fonctionne très bien.

+0

Est-il possible que des données de la base de données ne correspondent pas aux modifications que vous avez apportées récemment à Senior.class? –

+0

@MacLeanSochor J'ai eu le paramètre 'HashMap activities' pour écrire sur la base de données hier, j'ai juste essayé de supprimer ce nœud particulier de la base de données et cela fonctionne, donc l'erreur est définitivement là. –

Répondre

1

Cela se passe parce que votre HashMap n'a pas generic type parameters. Les <String, Object> sont manquantes. Ainsi, afin de résoudre ce problème, vous devez modifier cette ligne:

private HashMap<String, HashMap> activities; 

avec cette ligne:

private Map<String, Map<String, Object>> activities; 

Et maintenant, vous pouvez obtenir les données en conséquence.

Espérons que ça aide.