我尝试从Firebase数据库检索数据 但我有空指针exeption 这是我的模型代码
class Request {
var Name: String? = null
var Phone: String? = null
var Street: String? = null
var Home:String?= null
var Flat:String?=null
var Status: String?=null
}
这是我如何检索数据
var mDatabase=FirebaseDatabase.getInstance().reference
mDatabase.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDataChange(p0: DataSnapshot) {
for (d in p0.children) {
var modelRequest: Request? = d.child("Requests").child(user.toString()).getValue(Request::class.java)
var ord: Order? =d.child("Orders").getValue(Order::class.java)
Log.d("loadedList", "ok")
requestList.add(modelRequest!!)
}
}
})
这是我的数据结构
答案 0 :(得分:0)
您正在查看数据库中的顶级节点(Food
,Requests
等),然后获取每个节点的Requests
子节点。由于没有/Requests/Requests
会永远是null
。
距离应该更近:
override fun onDataChange(snapshot: DataSnapshot) {
var modelRequest: Request? = snapshot.child("Requests").child(user.toString()).getValue(Request::class.java)
var ord: Order? =snapshot.child("Orders").getValue(Order::class.java)
Log.d("loadedList", "ok")
requestList.add(modelRequest!!)
}
请注意,您现在正在从数据库加载所有数据,然后仅使用Requests
和Orders
节点。这浪费带宽,因此您实际上只应请求所需的数据。您可以通过附加两个侦听器并等待两者的结果来做到这一点。