web-dev-qa-db-fra.com

Analyse de DataSnapshot en classe Java dans Firebase à l'aide de getValue ()

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

7
Muhammad Muzammil

 enter image description here 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

détail

10
Hoa Nguyen

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) {

        }
    });

 Screenshot of values showing in the debugger

9
Frank van Puffelen

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.

2
Sevastyan

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.

1
Jmz