2016-05-20 3 views
1

今日の私は新しい(グーグル)Firebaseに移動しようとしました。新しいfirebaseへの変換 - 列挙型

だけでなく、APIは異なっているが、また、データがデータベースに格納されている方法が異なっています。例えば 、数字(ダブル)それは、もともと古いFirebaseによってこのようデータベースに書き込まれたときに「7.5」(文字列として識別される)正しく解析されていないとしてデータベースに保存されました。手動

は今、私は新しい問題に臨むなどダブルスのためのデータベース(7.5「7.5」)、ブール値(trueに「真」)を書き換える必要がありました。

致命的な例外:メイン プロセス:com.aayaffe.sailingracecoursemanager、PID:21845 java.lang.RuntimeException:活動ComponentInfo {COMを開始することができません私は、データベースに列挙型を作成しようとエラーが発生します。 aayaffe.sailingracecoursemanager/com.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity}:com.google.firebase.database.DatabaseException:クラスcom.aayaffe.sailingracecoursemanager.communication.ObjectTypesで見つけられる直列化するプロパティがありません。 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2658) android.app.ActivityThread.handleLaunchActivity(ActivityThread.j AVA:2723)android.os.Handler.dispatchMessageでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1422) (ハンドラでandroid.app.ActivityThread.access $ 900(ActivityThread.java:172) で .java:102) とandroid.os.Looper.loop(Looper.java:145) とandroid.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(ネイティブメソッド) (java.lang.reflect.Mava.372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.andr oid.internal.os.ZygoteInit.main(ZygoteInit.java:1194) によって発生しました:com.google.firebase.database.DatabaseException:com.aayaffe.sailingracecoursraceanity.comMunication.ObjectTypesクラスにシリアル化するプロパティがありません at com。 com.google.android.gms.internal.zzaix.zzawでgoogle.android.gms.internal.zzaix $ zza。(不明なソース)com.google.android.gms.internal.zzaix.zzjで (不明なソース) (不明な情報源) com.google.android.gms.internal.zzaix.zzaD(不明な情報源) com.google.android.gms.internal.zzaix $ zza.zzaE(不明な情報源) でcom.google。 android.gms.internal.zzaix.zzaw(不明な情報源)com.google.firebase.database.DatabaseReference.setValueでcom.google.firebase.database.DatabaseReference.zza(不明なソース) でcom.google.android.gms.internal.zzaix.zzav(不明なソース) で(不明なソース)com.aayaffeでcom.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity $ 5.run(GoogleMapsActivity.java:284) でcom.aayaffe.sailingracecoursemanager.communication.Firebase.writeBoatObject(Firebase.java:135) で 。 sailingracecoursemanager.map.GoogleMapsActivity.onStart(GoogleMapsActivity.java:407)android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)で でandroid.app.ActivityThreadでandroid.app.Activity.performStart(Activity.java:6258) 。android.app.ActivityThread $ HでperformLaunchActivity android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)で(ActivityThread.java:2621) android.app.ActivityThread.access $ 900(ActivityThread.java:172)で .handleMessage(ActivityThread.java:1422) (andler.os.Handler.dispatchMessage(Handler.java:102)) (android.os.Looper.loop(Looper.java:145) 、android.app.ActivityThread.main (ActivityThread.java:5832) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit.mainでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) で(ZygoteInit.java:1194)

のアイデア?

--EDITED--

コード:Firebase 9.0.0と

public enum ObjectTypes { 
    Gate, 
    Other 
}  
FirebaseDatabase.getInstance().getReferenceFromUrl(c.getString(R.string.firebase_base_url)).child("test").setValue(ObjectTypes.Gate); 
+0

数字の保存方法については何も変更していません。しかし、途中でバグが導入されていることは間違いありません。この問題を再現できる最小のコードを共有できますか? –

+0

@FrankvanPuffelenは質問に最小のコード例を追加しました – CaptainNemo

+0

ありがとうございました。私はそれを調べます。しかし、多少の質問で圧倒されているので、おそらく時間がかかるでしょう。 –

答えて

3

私の気持ちは、それがドキュメントにはるかに準拠していることです。

Jsonでサポートされている形式は、(String、Long、Double、Boolean、Map、List) - firebase docsからです。

以前のSDK(ジャクソンを使用)は柔軟性がありました。例えば。文字列は、数値であれば、モデルのLongに簡単に解析できます。リストは配列[]に解析することができます。

これは良いかもしれません。一方では柔軟性を失いますが、他方では、定義されたモデルと実際にネットワークに展開する内容を意識しています。

enumについては、postが参考になる場合があります。

関連する問題