Je suis bloqué pour créer une base de données Firebase.
J'essaie de modéliser une classe. Un cours très simple:
package com.glups.model;
import com.google.firebase.database.IgnoreExtraProperties;
@IgnoreExtraProperties
public class AlumnoFB {
private String nombre;
private String apellidos;
private String telefono;
private String email;
private Boolean tieneWhatsapp;
private Boolean tieneTelegram;
private Boolean tieneHangouts;
private Long formaPago;
private Double ratioHora;
private Double precioHora;
private Double horasCompensadas;
public AlumnoFB() {
// Default constructor required for calls to DataSnapshot.getValue(User.class)
}
public AlumnoFB(String nombre,
String apellidos,
String telefono,
String email,
Boolean tieneWhatsapp,
Boolean tieneTelegram,
Boolean tieneHangouts,
Long formaPago,
Double ratioHora,
Double precioHora,
Double horasCompensadas) {
this.nombre = nombre;
this.apellidos = apellidos;
this.telefono = telefono;
this.email = email;
this.tieneWhatsapp = tieneWhatsapp;
this.tieneTelegram = tieneTelegram;
this.tieneHangouts = tieneHangouts;
this.formaPago = formaPago;
this.ratioHora = ratioHora;
this.precioHora = precioHora;
this.horasCompensadas = horasCompensadas;
}
}
c'est presque comme un exemple de classe de Firebase.
L'utilisateur de l'application obtenu de getUser () a été enregistré sur Firebase.
Quand j'appelle SetValue:
AlumnoFB alumno = new AlumnoFB("", "", "", "", false, false, false, ((Integer)FormaPago.INT_NO_PAGADO).longValue(), 0.0, 0.0, 0.0);
mDatabase.child("AlumnoFB").child(ControlClasesFirebase.getUser().getUid()).setValue(alumno) ;
Une exception fatale soulève.
06-10 10:17:37.179 13841-13841/com.glups.controlclases E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.glups.controlclases, PID: 13841 com.google.firebase.database.DatabaseException: No properties to serialize found on class com.glups.model.AlumnoFB
at com.google.Android.gms.internal.zzaix$zza.<init>(Unknown Source)
at com.google.Android.gms.internal.zzaix.zzj(Unknown Source)
at com.google.Android.gms.internal.zzaix.zzaw(Unknown Source)
at com.google.Android.gms.internal.zzaix.zzav(Unknown Source)
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
at com.glups.controlclases.MainActivity$4.onClick(MainActivity.Java:305)
at Android.view.View.performClick(View.Java:4780)
at Android.view.View$PerformClick.run(View.Java:19866)
at Android.os.Handler.handleCallback(Handler.Java:739)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5258)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
J'ai vérifié les types et tous sont acceptés. Qu'est-ce qui ne va pas?
Firebase nécessite que votre Pojo ait variables publiques ou getter/setter.
Changer les déclarations de variable en public
public String nombre;
public String apellidos;
public String telefono;
public String email;
public Boolean tieneWhatsapp;
public Boolean tieneTelegram;
public Boolean tieneHangouts;
public Long formaPago;
public Double ratioHora;
public Double precioHora;
public Double horasCompensadas;
Si vous utilisez proguard, certaines méthodes du modèle pourraient être supprimées en fonction de votre configuration. Comme nous savons qu'il n'y a pas beaucoup d'optimisation pour POJO car il ne contient que des champs avec des accesseurs (getters) et/ou (optionnellement), vous pouvez utiliser l'annotation "@Keep" afin que proguard ne supprime aucune méthode de cette classe.
Vérifiez ceci pour plus d’informations: https://developer.Android.com/studio/build/shrink-code.html
@Keep
public class Store {}
Dans mon cas, j'ai oublié d'ajouter une règle de proguard pour conserver les classes de modèle:
-keep class com.google.firebase.example.fireeats.model.** { *; }
Ceci est identique à la réponse de @ aselims, juste la version proguard.
Je l'ai trouvé dans l'exemple du sapeur-pompier officiel:
https://github.com/firebase/quickstart-Android/blob/master/firestore/app/proguard-rules.pro
J'ai ce problème aujourd'hui et je viens de le résoudre en fournissant un getter/setter pour les variables privées.
ex:
private String pid;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
Maintenant, cela fonctionne parfaitement sans aucune erreur. J'espère que cela aidera les développeurs débutants.