Saya sedang membuat Firebase Database.
Saya mencoba menjadi model kelas. Kelas yang sangat sederhana:
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;
}
}
itu hampir seperti kelas sampel dari Firebase.
Pengguna aplikasi yang diperoleh dari getUser () telah login di Firebase.
Ketika saya memanggil 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) ;
Pengecualian fatal muncul.
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)
Saya sudah memeriksa jenis, dan semuanya diterima. Apa yang salah?
java
android
firebase
firebase-realtime-database
EulerVen
sumber
sumber
Jika Anda menggunakan proguard, beberapa metode dalam model dapat dihapus tergantung pada konfigurasi Anda. Seperti yang kita ketahui bahwa tidak ada banyak optimasi pada POJO karena POJO hanya memiliki field dengan getter dan / atau setter (opsional), Anda dapat menggunakan anotasi "@Keep" sehingga proguard tidak akan menghapus metode apapun dari kelas ini.
Periksa ini untuk info lebih lanjut: https://developer.android.com/studio/build/shrink-code.html
@Keep public class Store {}
sumber
ProguardTokenType.CRLF, ProguardTokenType.FLAG_NAME , ProguardTokenType.LINE_CMT or ProguardTokenType.WS expected, got '@'
Dalam kasus saya, saya lupa menambahkan aturan proguard untuk mempertahankan kelas model:
-keep class com.google.firebase.example.fireeats.model.** { *; }
Ini sama dengan jawaban @ aselims, hanya versi proguard.
Saya menemukannya di contoh firestore resmi:
https://github.com/firebase/quickstart-android/blob/master/firestore/app/proguard-rules.pro
sumber
Saya mendapat masalah ini hari ini dan hanya menyelesaikan ini menyediakan pengambil / penyetel untuk variabel pribadi.
ex:
private String pid; public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; }
Sekarang berfungsi dengan sempurna tanpa kesalahan apa pun. Semoga ini akan membantu pengembang pemula.
sumber
Deklarasikan variabel sebagai publik.
public String email
sumber
Jika ada yang mengalami ini dan tidak ada solusi di atas yang berfungsi, variabel yang dideklarasikan juga harus
Object
bertipe dan bukan tipe mentah.Sebagai contoh, Anda dapat menggunakan
Integer
's tetapi Anda tidak dapat menggunakanint
' s.Hal yang sama berlaku untuk
boolean
,float
,double
, dll Pada dasarnya, semua jenis tanpa box.sumber
menambahkan
@ServerTimeStamp public Date date;
membantu saya menyelesaikan masalah
sumber
Anda dapat melakukan salah satu dari dua hal -
sumber