Je sais comment analyser un objet DataSnapshot simple dans n'importe quelle classe Java à l'aide de public T getValue (Class<T> valueType)
. Mais après la Firebase 3.0, je ne suis pas en mesure d'analyser les données suivantes dans ma classe Java, car elle contient une instance de type personnalisé pour laquelle je reçois la valeur NULL.
NOTE: La même logique fonctionnait bien avant Firebase 3.0. Je suppose que c'est parce que Firebase utilise maintenant GSON au lieu de JACKSON. Corrigez-moi si j'ai tort, s'il-vous plait
LES DONNÉES:
{
"address" : "DHA karachi",
"addresstitle" : "DHA karachi",
"logoimage" : {
"bucketname" : "test2pwow",
"id" : "zubairgroup",
"mediaType" : "image/png",
"source" : 1,
"url" : "https://pwowgroupimg.s3.amazonaws.com/zubairgroup1173.png?random=727"
},
"title" : "zubairghori"
}
Group.Java
public class Group {
public String address;
public String addresstitle;
public LogoImage logoimage;
public Group(){}
}
LogoImage.Java
public class LogoImage {
public String bucketname;
public String id;
public LogoImage(){}
}
Code qui se lit comme suit:
Group group = datasnapshot.getValue(Group.class);
La variable LogoImage
de la base de données n'est pas convertie en objet logoimage
. Nous récupérons toujours null dans l'objet logoimage
.
public T getValue (Class valueType)
1.La classe doit avoir un constructeur default qui ne prend aucun argument
2.La classe doit définir des getters publics pour que les propriétés soient affectées. Les propriétés sans getter public auront la valeur par défaut lorsqu'une instance est désérialisée
Vérifiez-le sous: cette source ça vous aidera
Je ne sais pas pourquoi cela vous cause des problèmes. Ce code fonctionne bien pour moi avec les données que vous avez fournies:
DatabaseReference ref = database.getReference("37830692");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Group group = dataSnapshot.getValue(Group.class);
System.out.println(group);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
J'ai eu le même problème. Je l'ai résolu en fournissant non seulement des accesseurs pour toutes les valeurs, mais un paramètre aussi . J'espère que cela t'aides.
J'ai eu le même problème et l'ai résolu en m'assurant que les arguments du constructeur sont orthographiés de la même manière que les éléments enregistrés dans Firebase. Mon erreur a été que je définissais la clé de Firebase avec des lettres majuscules et des arguments d’objet avec des lettres minuscules.