L'analyse de DataSnapshot de classe Java dans Firebase à l'aide de getValue()
Je sais comment analyser un simple DataSnapshot objet de toute 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 de ma Classe Java, car il contient un type personnalisé instance pour laquelle je reçois NULL.
REMARQUE: La même logique a été fonctionne correctement avant de Firebase 3.0. Je suppose que c'est parce que maintenant Firebase est à l'aide de GSON au lieu de JACKSON. S'il vous plaît corrigez-moi si je me trompe
De 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 lire:
Group group = datasnapshot.getValue(Group.class);
Il ne jette pas LogoImage
partie de la base de données dans le logoimage
objet. Nous avons toujours récupérer la valeur null dans la logoimage
objet.
Je ne suis pas capable d'analyser ces données en Groupe à l'aide de cette ligne de code:
Group group = datasnapshot.getValue(Group.class);
Il ne jette pas LogoImage partie de la base de données dans le logoimage objet. Nous avons toujours récupérer la valeur null dans la logoimage objet.J'ai ajouté une non-réponse ci-dessous pour montrer que votre code fonctionne quand je l'ai essayer. J'ai littéralement il suffit d'importer votre JSON dans ma base de données et de copier vos classes sur un projet de test. Je ne suis pas sûr pourquoi vous obtenez pas de résultats, alors que je suis avec le même code. :-/
OriginalL'auteur Muhammad Muzammil | 2016-06-15
Vous devez vous connecter pour publier un commentaire.
T public getValue(Classe valueType)
1.La classe doit avoir une constructeur par défaut qui ne prend pas d'arguments
2.La classe doit définir des accesseurs public pour les propriétés à être cédés. Propriétés sans un getter public sera mis à leur valeur par défaut lorsqu'une instance est désérialisé
Le vérifier à partir de:
cette source Il va vous aider à
détail
OriginalL'auteur Hoa Nguyen
Je ne suis pas sûr pourquoi, qui est à l'origine de problème pour vous. Ce code fonctionne très bien pour moi avec les données que vous avez fournies:
Cette réponse a presque un an. Mais je suis sûr que j'ai simplement utilisé le
Group
classe à partir de la question.OriginalL'auteur Frank van Puffelen
J'ai eu le même problème. Je l'ai résolu en fournissant non seulement des getters pour toutes les valeurs, mais setter trop. Espérons que cette aide.
OriginalL'auteur Sevastyan Savanyuk
J'ai eu le même problème et l'a résolu en faisant en sorte que les arguments du constructeur sont orthographiés de la même manière que les éléments enregistrés au Firebase. Mon erreur est que j'ai été définissant la clé de Firebase avec des Majuscules et l'objet des arguments avec des lettres minuscules.
OriginalL'auteur Jmz