DatabaseException: Found two getters or fields with conflicting case sensitivity

13,539

Solution 1

The Firebase Database consider these items when serializing/deserializing JSON:

  • public fields
  • JavaBean-like property getters/setters

Since you have both a public field N and getN()/setN() methods, it considers the two in conflict. While in this case setting N and calling setN() leads to the same result, that may not always be the case. The chance of getting it wrong is too big, which is why the scenario is simply not allowed.

The error message is a bit of a red herring in this case. We should improve that.

Solution 2

Convert the following fields from public to private

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

to

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

Solution 3

I found a different solution to keep my field public String id and at the same time have the method public String getId() which I needed to implement because of an interface: Simply mark the method with @Exclude, e.g.:

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;
    }
}
Share:
13,539
user6462035
Author by

user6462035

Updated on July 26, 2022

Comments

  • user6462035
    user6462035 almost 2 years

    Every time I try to retrieve data from my database, I get

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

    for any of my fields that are a single letter. Googling this issue gives 0 results and I can find no case incongruities in my code. I don't know if this is a bug in Firebase or if I have to do something special for any fields with names 1 character long.

    Here is the rest of the error report if it makes a difference (the line of my code which it references is a simple

    params = dataSnapshot.getValue(Parameters.class);
    

    which works everywhere else:

    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)
    

    Here is the code for parameters with the relevant offending getters and setters of the fields which throw the 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;
        }
    }
    
  • Ammar ali
    Ammar ali almost 8 years
    Thank you for the answer was stuck in it for while until i found it :)
  • scienticious
    scienticious over 7 years
    Thanks for info Mr @Frank van Puffelen. My error has been resolved
  • Md. Sabbir Ahmed
    Md. Sabbir Ahmed about 5 years
    Changing the access modifier as private may create problem like this one stackoverflow.com/questions/37743661/… I have faced the same problem.