Android 从kotlin中的firebase子级检索数据
如何检索firebase中子对象的子对象中的数据(如图所示)?我试过了,但还是出错了 这是我获取数据的片段活动Android 从kotlin中的firebase子级检索数据,android,firebase,firebase-realtime-database,kotlin,Android,Firebase,Firebase Realtime Database,Kotlin,如何检索firebase中子对象的子对象中的数据(如图所示)?我试过了,但还是出错了 这是我获取数据的片段活动 package com.fish.isyania.aplikasipemesananreparasi.fragment import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View impo
package com.fish.isyania.aplikasipemesananreparasi.fragment
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ListView
import android.widget.Toast
import com.fish.isyania.aplikasipemesananreparasi.R
import com.fish.isyania.aplikasipemesananreparasi.adapter.OrderAdapter
import com.fish.isyania.aplikasipemesananreparasi.model.Order
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.fragment_order_list.view.*
class OrderListFragment : Fragment() {
lateinit var ref : DatabaseReference
lateinit var refChild : DatabaseReference
lateinit var orderList : MutableList<Order>
lateinit var listView : ListView
var user = FirebaseAuth.getInstance().currentUser
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_order_list, container, false)
var uid = user!!.uid
orderList = mutableListOf()
ref = FirebaseDatabase.getInstance().getReference("Order")
ref.child(uid).addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError?) {
Toast.makeText(context,"sorry", Toast.LENGTH_LONG ).show()
}
override fun onDataChange(p0: DataSnapshot?) {
if(p0!!.exists()){
orderList.clear()
for(h in p0.children){
val order = h.getValue(Order::class.java)
orderList.add(order!!)
}
val adapter = OrderAdapter(context!!, R.layout.order_row, orderList)
rootView.listView.adapter = adapter
}
}
})
return rootView
}
companion object {
fun newInstance(): OrderListFragment = OrderListFragment()
}
}
这是我的适配器
package com.fish.isyania.aplikasipemesananreparasi.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import com.fish.isyania.aplikasipemesananreparasi.R
import com.fish.isyania.aplikasipemesananreparasi.model.Order
class OrderAdapter(val mCtx : Context, val layoutResId : Int, val orderList : List<Order>) : ArrayAdapter<Order>(mCtx, layoutResId, orderList) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val layoutInflater : LayoutInflater = LayoutInflater.from(mCtx)
val view : View = layoutInflater.inflate(layoutResId, null)
val nomorPesanan = view.findViewById<TextView>(R.id.nomorPesanan)
val namaPemesan = view.findViewById<TextView>(R.id.namaPemesan)
val alamatPemesan = view.findViewById<TextView>(R.id.alamatPemesan)
val jenisPemesanan = view.findViewById<TextView>(R.id.jenisPemesanan)
val namaTeknisi = view.findViewById<TextView>(R.id.namaTeknisi)
val statusPemesanan = view.findViewById<TextView>(R.id.statusPemesanan)
var harga = view.findViewById<TextView>(R.id.hargaPemesanan)
val order = orderList[position]
var hargaPemesanan = order.harga
nomorPesanan.text = "Nomor Pesanan: " + order.nomorPesanan
namaPemesan.text = "Nama Pemesan: " + order.nama
alamatPemesan.text = "Alamat Pemesan: " + order.alamat
jenisPemesanan.text = "Jenis Pemesanan: " +order.jenisPemesanan
namaTeknisi.text = "Nama Teknisi: " + order.namaTeknisi
statusPemesanan.text ="Status Pemesanan" + order.status
harga.text = "Harga: " + hargaPemesanan.toString() + "(belum termasuk biaya pergantian suku cadang bila diperlukan)"
return view
}
}
package com.fish.isyania.aplikasipemesanareparasi.adapter
导入android.content.Context
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.ArrayAdapter
导入android.widget.TextView
进口com.fish.isyania.aplikasipemesanareparasi.R
导入com.fish.isyania.aplikasipemesanareparasi.model.Order
类OrderAdapter(val mCtx:Context,val layoutResId:Int,val orderList:List):ArrayAdapter(mCtx,layoutResId,orderList){
覆盖视图(位置:Int,转换视图:View?,父视图:ViewGroup?):视图{
val layoutInflater:layoutInflater=layoutInflater.from(mCtx)
val view:view=layoutInflater.充气(layoutResId,null)
val nomorpesan=view.findViewById(R.id.nomorpesan)
val-namaPemesan=view.findviewbyd(R.id.namaPemesan)
val alamatPemesan=view.findViewById(R.id.alamatPemesan)
val jenisPemesanan=view.findviewbyd(R.id.jenisPemesanan)
val namaTeknisi=view.findviewbyd(R.id.namaTeknisi)
val statusPemesanan=view.findviewbyd(R.id.statusPemesanan)
var harga=view.findViewById(R.id.hargaPemesanan)
val订单=订单列表[位置]
var hargaPemesanan=订单价格
nomorPesanan.text=“Nomor Pesanan:+order.nomorPesanan
namaPemesan.text=“Nama Pemesan:”+order.Nama
alamatPemesan.text=“Alamat Pemesan:”+order.Alamat
jenisPemesanan.text=“Jenis Pemesanan:+order.jenisPemesanan
namaTeknisi.text=“Nama Teknisi:+order.namaTeknisi
statusPemesanan.text=“Status Pemesanan”+order.Status
harga.text=“harga:”+hargaPemesanan.toString()+(这是一个很好的例子)
返回视图
}
}
我如何从firebase中的子对象(如图所示)获取数据 我认为你应该:
//将其添加到lateinit变量中
lateinit变量orderList:MutableList
val generatedID = //the id thats showing your DB
val datechild = //the date and hour child thats showing on your DB
ref = FirebaseDatabase.getInstance().getReference().child(generatedID).child(datechild)
ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
// handle errors for log
Log.e("DB ERROR", "-------> " + p0)
}
override fun onDataChange(p0: DataSnapshot) {
if(p0.exists()){
orderList.clear()
for (p in p0.children){
val plc = p.getValue(Order::class.java)
orderList.add(plc!!)
Log.d("adding", "Adding data to list DONE: " + p.getValue(Order::class.java))
}
for (p in List){
//do what you need
//example
}
}
}
})
你得到的确切错误是什么?当我按下fragmen的按钮时,它返回到以前的fragmen显示错误,没有错误很难帮助我不知道为什么,没有日志是红色的。当我转到该片段时,我的片段返回到片段之前没有错误,也没有错误日志,问题是我甚至无法从firebase获取子数据(?)
val generatedID = //the id thats showing your DB
val datechild = //the date and hour child thats showing on your DB
ref = FirebaseDatabase.getInstance().getReference().child(generatedID).child(datechild)
ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
// handle errors for log
Log.e("DB ERROR", "-------> " + p0)
}
override fun onDataChange(p0: DataSnapshot) {
if(p0.exists()){
orderList.clear()
for (p in p0.children){
val plc = p.getValue(Order::class.java)
orderList.add(plc!!)
Log.d("adding", "Adding data to list DONE: " + p.getValue(Order::class.java))
}
for (p in List){
//do what you need
//example
}
}
}
})