2017-01-29 6 views
1

FirebaseDatabaseで遊んでいて、非常に厄介なクラッシュを解決できません。Firebase Android - クラッシュ:「setGregorianChange」という名前の競合する設定者が見つかりました.setValue()

私が実行しようと毎回: FirebaseDatabase.getInstance().getReference().child("...").push().setValue(...)

アプリがクラッシュし、私はこのメッセージを持っている:

com.google.firebase.database.DatabaseException: Found a conflicting setters with name: setGregorianChange (conflicts with setGregorianChange defined on java.util.GregorianCalendar) 
at com.google.android.gms.internal.zzbqi$zza.<init>(Unknown Source) 
at com.google.android.gms.internal.zzbqi.zzi(Unknown Source) 
at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source) 
at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 
at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source) 
at com.google.firebase.database.DatabaseReference.zza(Unknown Source) 
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) 

このクラッシュは私がFirebaseDatabaseにカレンダーを含まれるオブジェクトを保存しようとした後に起こって開始します。

問題は、今、私はこのオブジェクトからカレンダーを削除しても、アプリは同じエラーでクラッシュし続けます。 何かが壊れているように見えますが、再び動作させることはできません。

私は自分の電話からアプリケーションをアンインストールし、Firebaseコンソールでデータベースを消去しても問題は解決しませんでした。

私のお手伝いができますか?

----- ----- EDIT

私はいくつかの新しいテストを行なったし、実際のアプリは、私が.setValue(...)に渡すクラスは、このメソッドが含まれている場合にのみクラッシュ保つ:

public Calendar getStartTimeCalendar() { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(startTime); 
    return calendar; 
} 

答えて

2

回答が見つかりました(あなたの助けを借りてDeepesh)。私は(Firebaseは、彼らがゲッターであることを考えるためか)、このメソッドを持っている場合

public long startTime; 
public long endTime; 

とアプリのクラッシュ:

私はFirebaseDatabaseに保存したいクラスは、これらの変数が含まれてい

public Calendar getStartTimeCalendar() { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(startTime); 
    return calendar; 
} 

public Calendar getEndTimeCalendar() { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(endTime); 
    return calendar; 
} 

解決方法は、これらのメソッドに接頭辞を付けることです。@Exclude

+0

に対応しています。私は自分自身の質問に答えることができますか?(http://stackoverflow.com/help/self-answer)2日後に戻って、回答として確認してください。 –

0

FirebaseデータベースはJSONデータベースです。つまり、JSONタイプのみを保存することができます。他のタイプの情報を格納しようとしている場合は、そのタイプと基礎となるJSONタイプ(データのシリアライズ/デシリアライズと呼ばれる)の間で変換する必要があります。

アンドロイド用FirebaseデータベースSDKに組み込まれたJavaツーJSONシリアライズ/デシリアライゼーションのはシリアライズすることができます/デシリアライズすべてはJSONタイプは、これらのタイプで構成され、単純なJavaオブジェクトを扱うことができるサポート。 java.util.GregorianCalendarのように、AndroidまたはJava SDKの既存のクラスを処理することはできません。

Firebaseデータベースに日付を保存する場合は、独自の方法で保存する必要があります。日付については、これは通常、次のいずれかの方法に帰着:

  1. 店舗UNIXタイムスタンプとして日付(エポックからのミリ秒)
  2. 店舗別の年、月、日のプロパティとして日付
  3. 店日付は文字列として

これらを実装する方法は、最初にGregorianCalendarを取得した方法に少し依存します。

0

IgnoreExtraPropertiesアノテーションは、取得するフィールドがなくても機能しませんldは

関連する問題