【发布时间】:2021-06-09 16:48:22
【问题描述】:
我试图从 firebase 获取数据。我尝试了 2 种方法,第一种方法给了我无法将 java.lang.String 类型的对象转换为数据类错误。尽管数据快照具有值,但第二个返回 null。 第一种方法:
database.getReference("Customers").child(custID).get().addOnSuccessListener {
it.children.forEach() {
var cust = it.getValue(DataClassCustomer::class.java)//Error
custName = cust?.firstName + " " + cust?.lastName
}
}
错误:
2021-03-12 00:25:39.634 28929-28929/com.example.goldenbeachhotelmanagementsystem E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.goldenbeachhotelmanagementsystem, PID: 28929
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.goldenbeachhoteldataclasses.DataClassCustomer
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.example.goldenbeachhotelmanagementsystem.RoomManagement$readCustData$1.onSuccess(RoomManagement.kt:243)
at com.example.goldenbeachhotelmanagementsystem.RoomManagement$readCustData$1.onSuccess(RoomManagement.kt:12)
at com.google.android.gms.tasks.zzn.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
这是数据类:
data class DataClassCustomer(
var email: String? = "", var firstName:String? = "", var ic:String? = "", var lastName:String? ="", var phone:String?= ""){
}
第二种方法: 我尝试不使用循环,但 cust 值为 null
database.getReference("Customers").child(custID).get().addOnSuccessListener {
var cust = it.getValue(DataClassCustomer::class.java)
custName = cust?.firstName + " " + cust?.lastName
println(custName)
}
调试输出: enter image description here
Firebase 客户: enter image description here
【问题讨论】:
标签: android firebase android-studio kotlin firebase-realtime-database