Reputation: 25
My Firebase storge
from the image above, I want to get all the milk powder based on the barcode of one of them
var query: Query = FirebaseDatabase.getInstance().getReference("Barcode")
.orderByChild("itemBarcode")
.equalTo(read)
where 'read' is the barcode number I only get one item,
I want instead to get all the item type and wight based on barcode number
like:
SELECT itemWieght, itemName, itemPrice FROM barcode WHERE itemBarcode.itemType = itemType
or something like this
EDIT :
here is my part of the code if that's helps
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
}
})
EDIT 2: I tried also to use 2 queries, but it shows empty results
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
}
})
}
})
Upvotes: 1
Views: 66
Reputation: 25
I did it by using "Kiet Phan" advice and used 2 query statement like this :
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
}
})
}
})
thanks to everyone for help
Upvotes: 0
Reputation: 44
If you want get all value inside an item (data snapshot) that mean you should catch a whole of that item so add your query to ListenerForSingleValueEvent
Reference : Query firebase data in Android
Upvotes: 1