Я не могу создать базу данных Firebase.
Я пытаюсь смоделировать класс. Очень простой класс:
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;
}
}
это почти как образец класса из Firebase.
Пользователь приложения, полученный из getUser (), вошел в Firebase.
Когда я вызываю 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) ;
Возникает фатальное исключение.
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)
Я проверил типы, и все принимаются. Что не так?
Если вы используете proguard, некоторые методы в модели могут быть удалены в зависимости от вашей конфигурации. Поскольку мы знаем, что для POJO нет особой оптимизации, поскольку у него есть только поля с геттерами и / или (необязательно) сеттерами, вы можете использовать аннотацию «@Keep», чтобы proguard не удалял какие-либо методы из этого класса.
Проверьте это для получения дополнительной информации: https://developer.android.com/studio/build/shrink-code.html
@Keep public class Store {}
источник
ProguardTokenType.CRLF, ProguardTokenType.FLAG_NAME , ProguardTokenType.LINE_CMT or ProguardTokenType.WS expected, got '@'
В моем случае я забыл добавить правило proguard, чтобы сохранить классы модели:
-keep class com.google.firebase.example.fireeats.model.** { *; }
Это то же самое, что и ответ @ aselims, только версия proguard.
Я нашел это в официальном примере firestore:
https://github.com/firebase/quickstart-android/blob/master/firestore/app/proguard-rules.pro
источник
Сегодня у меня возникла эта проблема, и я просто решаю ее, предоставляя геттер / сеттер для частных переменных.
пример:
private String pid; public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; }
Теперь он работает отлично, без ошибок. Надеюсь, это поможет новичкам.
источник
Объявите переменные общедоступными.
public String email
источник
Если кто-то столкнется с этим и ни одно из вышеперечисленных решений не сработает, объявленные переменные также должны быть
Object
типа, а не необработанного типа.Например, вы можете использовать
Integer
«s , но вы не можете использоватьint
» с.То же самое верно и для
boolean
,float
,double
и т.д. В принципе, любой Unboxed типа.источник
добавление
@ServerTimeStamp public Date date;
помог мне решить проблему
источник
Вы можете сделать одно из двух:
источник