2016-09-17 129 views
1

我知道有很多similiar問題,但沒有人有我找的,所有我諮詢有解答談論childrenEvetListeners問題的答案...就火力地堡DATABSE查詢爲Android

我的問題是簡單得多。我的Firebase數據庫: enter image description here

我的問題是:我如何進行查詢,檢查用戶名是否爲「fofof」?

謝謝!

+0

相關.. http://stackoverflow.com/questions/29403068/how-to-check-if-a-child-exists-in-firebase –

+0

是,但一直無人接聽 – rainman

回答

1

你有一個混合結構,這使事情變得複雜。但如果你只是/users/-K....下尋找匹配,你可以找到與之相匹配的是這樣的:

Query query = ref.child("users").orderByChild("User/username").equalTo("fofof"); 
query.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
      Log.i(TAG, "fofof exists and is stored under key "+userSnapshot.getKey()); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
    } 
}); 

關於當前設置了一些警告,雖然:

  • 你存儲用戶在推送ID下。雖然推送ID對於沒有自然鍵且您想按時間順序存儲的集合非常適合,但最好將用戶存儲在UID下。所以例如/users/s5iu...
  • 您將用戶信息嵌套在比所需更深的一層。雖然這個工作,我會擺脫在你的樹User級別。
  • 你有一個用戶直接根據/users,而其他人存儲更深一層。創建這樣一個混合模型是一個壞主意。
+0

非常感謝弗蘭克,因爲我知道推入ID被插入,因爲我使用push()函數來創建新節點,所以我試圖避免使用push(),但是在這種情況下,每次插入新用戶都會覆蓋現有節點,並且沒有新節點創建,有沒有什麼辦法來創建新的節點(在我的情況下爲用戶),而不使用push()? – rainman

+0

'ref.child(「users」)。child(userId).setValue(...)' –