Ich bin beim Erstellen einer Firebase-Datenbank überfordert.
Ich versuche eine Klasse zu modellieren. Eine sehr einfache Klasse:
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;
}
}
Das ist fast wie eine Beispielklasse von Firebase.
Der von getUser () erhaltene Anwendungsbenutzer wurde in Firebase angemeldet.
Wenn ich SetValue aufrufe:
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) ;
Eine fatale Ausnahme wird ausgelöst.
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)
Ich habe Typen überprüft und alle werden akzeptiert. Was ist los mit dir?
java
android
firebase
firebase-realtime-database
EulerVen
quelle
quelle
Wenn Sie Proguard verwenden, können einige Methoden im Modell abhängig von Ihrer Konfiguration entfernt werden. Da wir wissen, dass POJO nicht viel optimiert wird, da es nur Felder mit Gettern und / oder (optional) Setzern enthält, können Sie die Anmerkung "@Keep" verwenden, damit proguard keine Methoden aus dieser Klasse löscht.
Überprüfen Sie dies für weitere Informationen: https://developer.android.com/studio/build/shrink-code.html
quelle
ProguardTokenType.CRLF, ProguardTokenType.FLAG_NAME , ProguardTokenType.LINE_CMT or ProguardTokenType.WS expected, got '@'
In meinem Fall habe ich vergessen, eine Proguard-Regel hinzuzufügen, um die Modellklassen beizubehalten:
Dies ist das Gleiche wie die Antwort von @ aselims, nur die Proguard-Version.
Ich habe es im offiziellen Firestore-Beispiel gefunden:
https://github.com/firebase/quickstart-android/blob/master/firestore/app/proguard-rules.pro
quelle
Ich habe dieses Problem heute und löse es einfach, indem ich Getter / Setter für private Variablen bereitstelle.
Ex:
Jetzt funktioniert es einwandfrei. Hoffe, es wird Neulingen Entwicklern helfen.
quelle
Deklarieren Sie Variablen als öffentlich.
quelle
Falls jemand darauf stößt und keine der oben genannten Lösungen funktioniert, müssen die deklarierten Variablen ebenfalls vom
Object
Typ und nicht vom Rohtyp sein.Zum Beispiel, Sie können verwenden
Integer
ist , aber Sie können nicht verwendenint
's.Gleiches gilt für
boolean
,float
,double
usw. Im Grunde genommen jeder unboxed Typ.quelle
Hinzufügen
hat mir geholfen, das Problem zu lösen
quelle