web-dev-qa-db-ja.com

DatabaseException:大文字と小文字の区別が競合する2つのゲッターまたはフィールドが見つかりました

データベースからデータを取得しようとするたびに、

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

一文字である私のフィールドのいずれかのために。この問題をグーグルで検索すると結果は0になり、コードに大文字と小文字の不一致は見つかりません。これがFirebaseのバグなのか、それとも1文字の長さのフィールドに対して何か特別なことをしなければならないのかわかりません。

違いが生じた場合のエラーレポートの残りの部分は次のとおりです(参照するコードの行は単純です

params = dataSnapshot.getValue(Parameters.class);

これは他のどこでも機能します:

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)

エラーをスローするフィールドの関連する問題のあるゲッターとセッターを持つパラメーターのコードは次のとおりです。

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

Firebaseデータベースは、JSONをシリアル化/逆シリアル化するときに次の項目を考慮します。

  • パブリックフィールド
  • JavaBeanのようなプロパティゲッター/セッター

パブリックフィールドNメソッドとgetN()/setN()メソッドの両方があるため、2つが競合していると見なされます。この場合、Nを設定してsetN()を呼び出すと同じ結果になりますが、常にそうであるとは限りません。それを間違える可能性は大きすぎるので、シナリオは単に許可されていません。

この場合、エラーメッセージは少し赤いニシンです。それを改善する必要があります。

19

次のフィールドをパブリックからプライベートに変換します

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

フィールドを_public String id_に保ち、同時にインターフェイスのために実装する必要のあるメソッドpublic String getId()を使用する別の解決策を見つけました。メソッドに_@Exclude_のマークを付けるだけです。例えば:

_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