2017-03-03 57 views
2

My Database Screenshot如何在firebase android中獲取具有特定值的子項數量?

我想獲得狀態不是OK的所有化合物的值,您可以在我上傳的圖片中看到。我已經嘗試過,但是我沒有得到價值。請幫助我創建正確的查詢,以實現我想要的目標。

mUserCompounds.orderByChild("status").equalTo("NOT OK").addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      long compounds_solved = dataSnapshot.getChildrenCount(); 
      String output = String.valueOf(compounds_solved); 
      Log.d("OUTPUT", "Total not ok " + output); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      long compounds_solved = dataSnapshot.getChildrenCount(); 
      String output = String.valueOf(compounds_solved); 
      Log.d("OUTPUT", "Total not ok " + output); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

我想獲得的compound_solved是4.但是基於我的代碼得到的是這個。

Output Screenshot here

請!幫我解決我的問題!提前致謝! :)

回答

2

ChildEventListener會爲您提供發生事件的子項的數據。所以當你得到快照上的孩子數量時,你實際上得到了屬性數量。圖像,名稱和狀態(3)。

改爲使用ValueEventListener。

mUserCompounds.orderByChild("status").equalTo("NOT OK").addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         System.out.println(dataSnapshot.getChildrenCount());      } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
+0

如何得到這個特別的孩子對象 –

1

根據我的理解,你想知道有多少種化合物的狀態是'NOT OK'。你沒有看到4的原因是因爲datasnapshot.getChildrenCount指向傳遞查詢的每個數據快照。氨,氧化鈣,一氧化碳,二氫都逐一進入了onChildAdded。數據快照是每個結果。你每次看到3的原因是每個化合物都有3個屬性。圖像,名稱和狀態。這就是爲什麼每次調用datasnapshot.getChildrenCount()時都會看到3。

Firebase目前無法對查詢結果進行「計數」。你可以通過兩種方式實現你想要的。

  1. 改爲創建事件值事件偵聽器,它可以是單個或不是。沒關係

    mUserCompounds.orderByChild("status").equalTo("Not ok").addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         Log.v("result", String.valueOf(dataSnapshot.getChildrenCount())); 
        } 
    
        @Override 
        public void onCancelled(DatabaseError databaseError) { 
    
        } 
    }); 
    

這將讓你「算」有多少化合物的好不好沒關係

狀態
  • 有另一部分您的數據庫會記錄多少種化合物的狀態爲「不正常」並且狀態爲「正常」。它可能看起來像這樣。
  •  
    |----status 
           |------ok : 5 
           |------notok:10 
    
    
    

    而且你可以查詢數據庫的這一部分。每次化合物的狀態發生變化時,都會更新數據庫的這部分內容(遞增和遞減計數器)。當你想知道有多少化合物有一個好的狀態時,你可以引用root.child(「status」)。child(「Not ok」)並添加一個值事件監聽器

    +0

    第二種方法對我來說也是件好事!這樣,我可以很容易地查詢狀態:) –

    +0

    投票我pls ...我住的代表xD –

    +0

    已經做過先生! :) –

    相關問題