[英]How to get specific values from firebase realtime database.Similar to a where clause in sql
我對android和firebase有點陌生,但我需要從我的firebase實時數據庫中獲取一些值,類似於sql中的select stmt(從All_machines中選擇地址,名稱,其中terminal_id =“terminal_id”)。 當我執行下面的代碼時,我得到了一個空指針異常。 但我想我還沒有理解這個概念。
mDatabase = FirebaseDatabase.getInstance().getReference("All Machines");
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
if (childDataSnapshot.getValue() != null){
try {
if (childDataSnapshot.child("terminal_id").getValue().toString().equals(newTerminal_id)){
String Terminal_address= ""+ childDataSnapshot.child("address").getValue();
String Terminal_name = ""+ childDataSnapshot.child("terminal_name").getValue();
terminal_name.setText(Terminal_name);
terminal_address.setText(Terminal_address);
}
else {
Toast.makeText(getApplicationContext(),"No Entry matching barcode",Toast.LENGTH_LONG).show();
}
//Log.v(TAG,""+ childDataSnapshot.child("terminal_name").getValue()); //gives the value for given keyname
}catch (Exception e){
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(getApplicationContext(),"It's null.",Toast.LENGTH_LONG).show();
}
//Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node
//get the terminal id for each child then check if it matches the scanned barcode
}
}catch (Exception e){
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
數據庫結構:
{
"All Machines": {
"-M-JnXkserObKnDj3iZO": {
"address": "OANDO IDIROKO",
"atmClass": "6627",
"bankName": "SPL",
"brand": "NCR",
"id": "-M-JnXkserObKnDj3iZO",
"ip": "1033944",
"latitude": "10333",
"longitude": "10333",
"serial_no": "13528891",
"terminal_Id": "10332368",
"terminal_name": "ATM9"
}
}
}
您可以使用orderByChild
和equalTo
方法來過濾服務器端的數據,如下所示:
// Get DatabaseReference for All Machines
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("All Machines");
// Use orderByChild to order data by terminal_Id and use equalTo for filter by newTerminal_id
Query query = databaseReference.orderByChild("terminal_Id").equalTo(newTerminal_id);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String Terminal_address= childSnapshot.child("address").getValue(String.class);
String Terminal_name = childSnapshot.child("terminal_name").getValue(String.class);
terminal_name.setText(Terminal_name);
terminal_address.setText(Terminal_address);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
輸出:如果terminal_Id
等於10332368 ,則
Terminal_address = "OANDO IDIROKO";
Terminal_name = "ATM9";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.