如何从Firebase中检索数据列表并将其存储到ArrayList <>

问题描述 投票:-1回答:1

我有一个Firebase数据库,我想从那里检索数据列表并存储到ArrayList中。

产品模型很好,可以正常工作。

class Product(var pName: String?, var pUnit: Int, var pPrice: Double, var pAmount: Double)

但是以某种方式我无法从数据库中获取“项目”列表。我想要的是获取pnamepunitppricepamount并将其存储在ArrayList<Product>

enter image description here

我对数据库的引用是这个;

 ref = FirebaseDatabase.getInstance().getReference().child("Sales")

    ref.addValueEventListener(object : ValueEventListener{
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {

            var sira: Int = 0

            ref.addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onCancelled(p0: DatabaseError) {

                }

                override fun onDataChange(p1: DataSnapshot) {

                    println("onDataChange")
                    if (p0.exists()) {

                        list.clear()


                        for (h in p0.children) {


                            val dateR = h.child("date").value.toString()
                            val discountR = h.child("discount").value.toString()
                            val dueR = h.child("due").value.toString()
                            val nameR = h.child("name").value.toString()
                            val totalR = h.child("total").value.toString()
                            val subtotalR = h.child("subTotal").value.toString()
                            val timeR = h.child("time").value.toString()

                            val name = h.child("pname").value.toString()
                            val unit = h.child("punit").value.toString()
                            val price = h.child("pprice").value.toString()
                            val amount = h.child("pamount").value.toString()


                            productList.add(Product(name, unit.toInt(), price.toDouble(), amount.toDouble()))

但是,请帮助我在这里做错了什么。任何帮助表示赞赏。

谢谢。

android firebase kotlin arraylist recycler-adapter
1个回答
0
投票

您可以尝试:使用GenericTypeIndicator获取列表数据

private lateinit var database: DatabaseReference
private var productList: ArrayList<Product> = arrayListOf()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    database = FirebaseDatabase.getInstance().getReference("Sales")
    database.addValueEventListener(object: ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {
            productList.clear()
            for (snapshot in p0.children) {
                if (snapshot.hasChild("items")) {
                    val generic: GenericTypeIndicator<List<Product>> =
                        object : GenericTypeIndicator<List<Product>>() {}
                    val items = snapshot.child("items").getValue(generic)
                    items?.let { productList.addAll(it) }
                }
            }
        }

    })
}
class Product {
    var pName: String? = null
    var pUnit: Int? = null
    var pPrice: Double? = null
    var pAmount: Double? = null
}
© www.soinside.com 2019 - 2024. All rights reserved.