转换到新的firebase - 枚举 [英] Converting to new firebase - enums

查看:115
本文介绍了转换到新的firebase - 枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

今天我试图移动到新的(Google)Firebase。

Today I tried to move to the new (Google)Firebase.

不仅API不同,而且数据存储在数据库中的方式也不同。
例如,数据库中作为7.5保存的数字(Double)在原始的Firebase原始写入数据库时​​不会正确解析(标识为字符串)。必须手动重写数据库为Doubles(7.5至7.5),Booleans(true为true)等。

Not only is the API different, but also the way data is stored in the database is different. For instance, numbers (Double) saved in the database as "7.5" is not parsed correctly (identified as string) when it was originally written to the database this way by the old Firebase. Had to manually rewrite the database for Doubles ("7.5" to 7.5), Booleans ("true" to true) etc.

现在我遇到一个新问题。尝试将枚举写入数据库时​​收到错误:

Now I come upon a new issue. I get an error when trying to write enums to the database:


致命异常:main
进程: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.handleLaunchActi vity(ActivityThread.java:2723)
在android.app.ActivityThread.access $ 900(ActivityThread.java:172)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:145)
在android.app.ActivityThread.main( ActivityThread.java:5832)
在java.lang.reflect.Method.invoke(Native Method)
在java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399)
在com.android .internal.os.ZygoteInit.main(ZygoteInit.java:1194)
导致:com.google.firebase.database.DatabaseException:没有属性可以在类com.aayaffe.sailingracecoursemanager.communication.ObjectTypes $ b上找到序列化$ b com.google.android.gms.internal.zzaix $ zza。(未知来源)
com.google.android.gms.interna l.zzaix.zzj(未知来源)
com.google.android.gms.internal.zzaix.zzaw(未知来源)
com.google.android.gms.internal.zzaix.zzaD(未知来源)
在com.google.android.gms.internal.zzaix $ zza.zzaE(未知来源)
在com.google.android.gms.internal.zzaix.zzaw(未知来源)
在com.google.android.gms.internal.zzaix.zzav(未知来源)
在com.google.firebase.database.DatabaseReference.zza(未知来源)
com.google.firebase.database.DatabaseReference.setValue(未知来源)
在com.aayaffe.sailingracecoursemanager.communication.Firebase.writeBoatObject(Firebase.java:135)
在com.aayaffe.sailingracecoursemanager。 map.GoogleMapsActivity $ 5.run(GoogleMapsActivity.java:284)
at com.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity.onStart(GoogleMapsActivity.java:407)
在android.app.Instrumentation.callActivityOnStart(Instrumentation .java:1234)
在android.app.Activity.performStart(Activity.java:6258)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2621)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java :2723)
在android.app.ActivityThread.access $ 900(ActivityThread.java:172)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1422)
在android .os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:145)
在android.app.ActivityThread.main(ActivityThread.java:5832)
在java.lang.reflect.Method.invoke(本机方法)
在java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

FATAL EXCEPTION: main Process: com.aayaffe.sailingracecoursemanager, PID: 21845 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aayaffe.sailingracecoursemanager/com.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity}: com.google.firebase.database.DatabaseException: No properties to serialize found on class com.aayaffe.sailingracecoursemanager.communication.ObjectTypes at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) at android.app.ActivityThread.access$900(ActivityThread.java:172) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) Caused by: com.google.firebase.database.DatabaseException: No properties to serialize found on class com.aayaffe.sailingracecoursemanager.communication.ObjectTypes at com.google.android.gms.internal.zzaix$zza.(Unknown Source) at com.google.android.gms.internal.zzaix.zzj(Unknown Source) at com.google.android.gms.internal.zzaix.zzaw(Unknown Source) at com.google.android.gms.internal.zzaix.zzaD(Unknown Source) at com.google.android.gms.internal.zzaix$zza.zzaE(Unknown Source) at com.google.android.gms.internal.zzaix.zzaw(Unknown Source) at com.google.android.gms.internal.zzaix.zzav(Unknown Source) at com.google.firebase.database.DatabaseReference.zza(Unknown Source) at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) at com.aayaffe.sailingracecoursemanager.communication.Firebase.writeBoatObject(Firebase.java:135) at com.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity$5.run(GoogleMapsActivity.java:284) at com.aayaffe.sailingracecoursemanager.map.GoogleMapsActivity.onStart(GoogleMapsActivity.java:407) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234) at android.app.Activity.performStart(Activity.java:6258) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2621) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)  at android.app.ActivityThread.access$900(ActivityThread.java:172)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:145)  at android.app.ActivityThread.main(ActivityThread.java:5832)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

想法?

- EDITED -

--EDITED--

代码:

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


推荐答案

我对Firebase 9.0.0的感觉是它坚持更多的文档。

My feeling with Firebase 9.0.0 is that it adheres much more to the documentation.

Json支持的格式是(String,Long,Double,Boolean,Map,List) - 从 firebase docs

Json supported formats are ( String, Long, Double, Boolean, Map, List) - from firebase docs.

以前的SDK - 使用Jackson - 更灵活。例如。只要它是一个数字,一个字符串可以很容易地被解析为一个长的模型。列表可以被解析成数组[],等等...不再。

The previous SDK - using Jackson - was more flexible. Eg. A String could easily be parsed to a Long in the model, as long as it's a numeric. Lists could be parsed into Arrays [], and so on... Not anymore.

这可能是好还是不好。一方面,您失去了灵活性,但另一方面却让您对定义的模型和实际部署到网络的意识更加敏感。

This may be good or not. In one hand you lose flexibility but in the other it makes you more conscious on the defined model and what you actually deploy to the network.

关于枚举这个帖子可能有帮助。

With respect to enums this post may help.

这篇关于转换到新的firebase - 枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆