Android 从kotlin中的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

如何检索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
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
                }
            }
        }
    })