web-dev-qa-db-fra.com

DatabaseException: deux getters ou champs avec une sensibilité à la casse conflictuelle ont été trouvés

Chaque fois que j'essaie de récupérer des données de ma base de données, je reçois

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

pour n'importe lequel de mes champs qui sont une seule lettre. Googler ce numéro donne 0 résultats et je ne trouve aucun cas d'incongruit dans mon code. Je ne sais pas s'il s'agit d'un bogue dans Firebase ou si je dois faire quelque chose de spécial pour les champs dont le nom comporte 1 caractère.

Voici le reste du rapport d’erreur si cela fait une différence (la ligne de mon code à laquelle il fait référence est simple).

params = dataSnapshot.getValue(Parameters.class);

qui fonctionne partout ailleurs:

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)

Voici le code pour les paramètres avec les getters et les régleurs concernés des champs qui génèrent l'erreur:

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;
    }
}
7
user6462035

La base de données Firebase prend en compte ces éléments lors de la sérialisation/désérialisation de JSON:

  • champs publics
  • Getters/setters de propriétés de type JavaBean

Etant donné que vous avez à la fois une méthode N et getN()/setN() champ public, elle considère les deux en conflit. Alors que dans ce cas, définir N et appeler setN() aboutissent au même résultat, il se peut que ce ne soit pas toujours le cas. La chance de se tromper est trop grande, c'est pourquoi le scénario n'est tout simplement pas autorisé.

Le message d'erreur est un peu un harcèlement rouge dans ce cas. Nous devrions améliorer cela.

15
Frank van Puffelen

Convertir les champs suivants du public au privé

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

à

private int K;
private double L;
private int D;
private int N;
4
oliro Amuri bonface

J'ai trouvé une solution différente pour conserver mon champ public String id tout en ayant la méthode public String getId() que je devais implémenter à cause d'une interface: Marquez simplement la méthode avec @Exclude, par exemple:

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