2016-07-06 15 views
9

Làm cách nào để nhận khóa "-KLpcURDV68BcbAvlPFy" khi tôi biết trường "tên" chứa "efg" trong cấu trúc sau trong Firebase.Cách lấy khóa từ giá trị trong căn cứ hỏa hoạn

clubs 
    -KLpcURDV68BcbAvlPFy 
     dept: "abc" 
     desc: "xyz" 
     name: "efg" 
    -asdasdasddsad 
     dept: "asda" 
     desc: "asd" 
     name: "adddd" 

tôi đã cố gắng này, nhưng nó lại "câu lạc bộ"

mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      String clubkey =dataSnapshot.getKey(); 

Trả lời

12

Đó là bởi vì bạn đang sử dụng một ValueEventListener. Nếu truy vấn phù hợp với nhiều trẻ em, nó sẽ trả về một danh sách tất cả những đứa trẻ đó. Ngay cả khi chỉ có một con phù hợp, nó vẫn là danh sách của một. Và vì bạn đang gọi số getKey() trong danh sách đó, bạn sẽ nhận được khóa của vị trí mà bạn đã chạy truy vấn.

Để có được chìa khóa của trận đấu trẻ em, vòng qua con cái ảnh chụp:

mDatabase.child("clubs") 
     .orderByChild("name") 
     .equalTo("efg") 
     .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
      String clubkey = childSnapshot.getKey(); 

Nhưng lưu ý rằng nếu bạn cho rằng tên câu lạc bộ là duy nhất, bạn cũng có thể lưu trữ các câu lạc bộ thuộc họ tên và truy cập đúng địa chỉ mà không có truy vấn:

mDatabase.child("clubs") 
     .child("efg") 
     .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String clubkey = dataSnapshot.getKey(); // will be efg 
+0

Cảm ơn nó đã hoạt động. –

Các vấn đề liên quan