Firebase Опрос множества дочерних элементов на основе одного значения атрибута у одного из них - PullRequest
1 голос
/ 17 февраля 2020

Мой Firebase Storge

из изображения выше, я хочу получить все сухое молоко на основе штрих-кода одного из них

var query: Query = FirebaseDatabase.getInstance().getReference("Barcode")
                    .orderByChild("itemBarcode")
                    .equalTo(read)

где 'read' - это номер штрих-кода, я получаю только один элемент, вместо этого я хочу получить все типы элементов и их вес на основе номера штрих-кода, например: SELECT itemWieght, itemName, itemPrice FROM barcode WHERE itemBarcode.itemType = itemType или что-то вроде

EDIT:

вот моя часть кода, если это поможет

var query: Query = FirebaseDatabase.getInstance().getReference("Barcode")
                    .orderByChild("itemBarcode")
                    .equalTo(read)

                //Adapter
                query.addValueEventListener(object : ValueEventListener {
                    override fun onCancelled(p0: DatabaseError) {

                    }

                    override fun onDataChange(p0: DataSnapshot) {
                        myBarcodeArray?.clear()
                        for (r in p0.children) {
                            var infoHolder = r.getValue(BarcodeInfo::class.java)


                            myBarcodeArray!!.add(infoHolder!!)
                        }
                        val infoAdapter = BarcodeResultAdapter(applicationContext, myBarcodeArray!!)
                        view.listOfBarcodeResult.adapter = infoAdapter
                    }
                })

РЕДАКТИРОВАТЬ 2: Я также пытался использовать 2 запроса, но он показывает пустые результаты

myDataRef?.child("Barcode")?.orderByChild("itemBarcode")?.equalTo(read)?.addListenerForSingleValueEvent(object : ValueEventListener{
                    override fun onCancelled(p0: DatabaseError) {

                    }
                    override fun onDataChange(p0: DataSnapshot) {
                        var result = p0.getValue(BarcodeInfo::class.java)
                        myDataRef?.child("Barcode")?.orderByChild(result?.itemWeight.toString())?.equalTo(read)?.addValueEventListener(object : ValueEventListener{
                            override fun onCancelled(p0: DatabaseError) {
                            }
                            override fun onDataChange(p0: DataSnapshot) {
                                for (r in p0.children){
                                    var holder = r.getValue(BarcodeInfo::class.java)
                                    myBarcodeArray!!.add(holder!!)
                                }
                                val infoAdapter = BarcodeResultAdapter(applicationContext, myBarcodeArray!!)
                                view.listOfBarcodeResult.adapter = infoAdapter
                            }
                        })
                    }
                })

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Если вы хотите получить все значения внутри элемента (моментальный снимок данных), что означает, что вы должны перехватить весь этот элемент, добавьте свой запрос в ListenerForSingleValueEvent

Ссылка: Запросите данные из базы данных в Android

0 голосов
/ 17 февраля 2020

Я сделал это, воспользовавшись советом "Kiet Phan", и применил 2 запроса, например:

var query: Query = FirebaseDatabase.getInstance().getReference("Barcode")
                    .orderByChild("itemBarcode")
                    .equalTo(read)
                query.addValueEventListener(object : ValueEventListener {
                    override fun onCancelled(p0: DatabaseError) {}
                    override fun onDataChange(p0: DataSnapshot) {
                        myBarcodeArray?.clear()
                        for (r in p0.children) {
                            var infoHolder = r.getValue(BarcodeInfo::class.java)
                            type = infoHolder?.itemType.toString()
                        }
                        var query2: Query = FirebaseDatabase.getInstance().getReference("Barcode")
                            .orderByChild("itemType")
                            .equalTo(type)
                        query2.addValueEventListener(object : ValueEventListener{
                            override fun onCancelled(p0: DatabaseError) {}

                            override fun onDataChange(p0: DataSnapshot) {
                                for (r in p0.children) {
                                    var infoHolder = r.getValue(BarcodeInfo::class.java)
                                    type = infoHolder?.itemType.toString()
                                    myBarcodeArray!!.add(infoHolder!!)
                                }
                                val infoAdapter = BarcodeResultAdapter(applicationContext, myBarcodeArray!!)
                                view.listOfBarcodeResult.adapter = infoAdapter
                            }
                        })
                    }
                })

спасибо всем за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...