Pregunta DatabaseException: se encontraron dos captadores o campos con sensibilidad de caso en conflicto


Cada vez que trato de recuperar datos de mi base de datos, obtengo

com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: n

para cualquiera de mis campos que son una sola letra. Buscar en Google este problema arroja 0 resultados y no puedo encontrar incongruencias de casos en mi código. No sé si esto es un error en Firebase o si tengo que hacer algo especial para cualquier campo con nombres de 1 carácter.

Aquí está el resto del informe de errores si hace una diferencia (la línea de mi código a la que hace referencia es una simple

params = dataSnapshot.getValue(Parameters.class);

que funciona en todos lados:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: osu.gd_prototype, PID: 11345
com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: n
at com.google.android.gms.internal.zzaix$zza.zziw(Unknown Source)
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.zzd(Unknown Source)
at com.google.android.gms.internal.zzaix.zzb(Unknown Source)
at com.google.android.gms.internal.zzaix.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at osu.gd_prototype.DataSend$1.onDataChange(DataSend.java:107)
at com.google.android.gms.internal.zzafp.zza(Unknown Source)
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
at com.google.android.gms.internal.zzags$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

Aquí está el código para los parámetros con los getters y setters ofensores relevantes de los campos que arrojan el error:

public class Parameters {

    public int K;
    public double L;
    public int D;
    public int N;

    public Parameters() {

}

    public double getL(){
        return L;
    }
    public void setL(double lVal){
        L = lVal;
    }

    public int getK(){
        return K;
    }
    public void setK(int kVal){
        K = kVal;
    }

    public int getD(){
        return D;
    }
    public void setD(int dVal){
        D = dVal;
    }

    public int getN(){
        return N;
    }
    public void setN(int nVal){
        N = nVal;
    }
}

5
2018-06-14 00:10


origen


Respuestas:


La base de datos Firebase considera estos elementos al serializar / deserializar JSON:

  • campos públicos
  • Getters / setters de propiedades tipo JavaBean

Como tiene ambos un campo público N y getN()/setN() métodos, considera los dos en conflicto. Mientras que en esta configuración de caso N y llamando setN() conduce al mismo resultado, que puede no ser siempre el caso. La posibilidad de equivocarse es demasiado grande, por lo que el escenario simplemente no está permitido.

El mensaje de error es un poco desviado en este caso. Deberíamos mejorar eso.


14
2018-06-14 04:03



Convierte los siguientes campos de público a privado

public int K;
public double L;
public int D;
public int N;

a

private int K;
private double L;
private int D;
private int N;

3
2017-08-30 06:03



Encontré una solución diferente para mantener mi campo public String id y al mismo tiempo tener el método public String getId() que necesitaba implementar debido a una interfaz: simplemente marque el método con @Exclude, p.ej.:

public class Group implements Identifiable<String>
{
    public String id;

    protected Group ()
    {
    }

    public Group ( String id )
    {
        this.id = id;
    }

    @Exclude
    @Override
    public String getId ()
    {
        return id;
    }
}

0
2018-05-15 23:10