2017-04-25 54 views
1

我正在尋找通過我的Firebase數據庫進行搜索並查找匹配我的查詢的字段:值配對,然後返回該父項的鍵或父對象,以便我也可以抓取其他信息。根據字段查詢Firebase並在Android中返回父項

的火力地堡數據庫看起來是這樣的:

Events{ 
    -KiXlIGhB6k-HpCKfO3n{ 
    name:"Breakfast at Tiffany's", 
    owner:"Tim", 
    startTime:{ 
     startHour:1, 
     startMinute:30 
    }, 
    ... 
    }, 
    -dFgfh8Efa-Hpwe6Goqp0{...} 
} 

目前,我正在嘗試:

public void importSchedule(String ownerName){ 
DatabaseReference events = 
FirebaseDatabase.getInstance().getReference("Events"); //Inside the Events list 

Query allOwnersEvents = events.equalTo(ownerName); //Find events equalTo ownerName provided 

allOwnersEvents.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot post : dataSnapshot.getChildren()) { 
      // This is where the parent's could be queried, all events belonging to an "owner" should be cycled through 
     } 
    } 
    public void onCancelled(DatabaseError databaseError) {} 
}); 

放置一個破發點中的for循環然而,當,它永遠不會觸發。我想知道我是否正確嘗試查詢,或者是否有更簡單的方法來完成此操作。

回答

1

它從來沒有被觸發,因爲你的DatabaseReference是錯誤的。當你查詢時,你錯過了一個孩子。爲了有正確的DatabaseReference請使用此代碼:

DatabaseReference events = FirebaseDatabase.getInstance().getReference("Events") 
    events.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String eventKey = ds.getKey(); //parent key 

      DatabaseReference allOwnersEvents = FirebaseDatabase.getInstance().getReference("Events").child(eventKey); 
      allOwnersEvents.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String ownerName = dataSnapshot.child("ownerName").getValue(String.class); //do what you want with ownerName 
       } 
       public void onCancelled(DatabaseError databaseError) {} 
      }); 
     } 
    } 
    public void onCancelled(DatabaseError databaseError) {} 
}); 

在這eventId是由push()方法生成的唯一的ID。希望能幫助到你。

+0

如果我正在查看所有事件(而不僅僅是eventID指定的那個),該怎麼辦?我試圖獲得所有的ownerName裏面的所有事件 –

+0

所以這是所有的事件,而不是一個。因爲'eventId'是一個變量而不是單個值。如果我已經在你的代碼中使用過,比如說,child(「 - KiXlIGhB6k-HpCKfO3n」)比只適用於單個事件。但這適用於所有事件。 –

+0

對不起,如果我誤解了你,但是你說'child(eventID)'會查詢我所有的事件嗎?並將唯一鍵存儲在eventID變量中?或者你是否說孩子(「 - KiXlIGhB6k-HpCKfO3n」)只會查詢一個孩子。在這種情況下,我假設我沒有我想要查詢的事件的ID –