2016-10-25 123 views
0

因此,我有一個存儲在firebase中的對象列表,並且希望僅使用子查詢方法查詢一個對象,但是我正在使用單個鍵值獲取地圖。firebase - 從列表中獲取單個對象作爲快照

下面的代碼顯示了我想要實現而不是處理hashmaps。

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference coutryRef = database.getReference(FireContract.PATH_COUNTRY); 

    Query countryQuery = coutryRef.orderByChild(FireContract.CHILD_NAME) 
      .equalTo(TestUtilities.TEST_COUNTRY_ALGERIA).limitToFirst(1); 

    countryQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Country country = dataSnapshot.getValue(Country.class); 
      assertEquals(TestUtilities.TEST_COUNTRY_ALGERIA, country.getName()); 

      //get country key 
      String coutryKey = dataSnapshot.getKey(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      fail("Failed to get country: " + databaseError.getMessage()); 

     } 
    }); 

回答

1

當您啓動查詢時,您將始終獲得結果列表。即使只有一個項目與查詢匹配,結果也會是一個項目的列表。

要處理列表中,您可以使用一個ChildEvenListener或者你可以循環遍歷您ValueEventListener孩子:

countryQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot countrySnapshot: dataSnapshot.getChildren()) { 

      Country country = countrySnapshot.getValue(Country.class); 
      assertEquals(TestUtilities.TEST_COUNTRY_ALGERIA, country.getName()); 

      //get country key 
      String countryKey = countrySnapshot.getKey(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     fail("Failed to get country: " + databaseError.getMessage()); 
    } 
}); 
+0

。將這種評論可能會按照對StackOverflow上不合適,但我不能停止我的自我 –

+0

你不知道我有多興奮,看到你回覆我的帖子,我曾經看過你關於firebase的談話,真的很喜歡他們...... D –

+0

哦。你也可以看看這個,這將是一個很大的忙。 –