2016-05-23 16 views
20

Tôi đang cố tạo ứng dụng trên Android. Tôi cần phải kiểm tra xem một yếu tố nhất định của cơ sở dữ liệu của tôi trên firebase có một đứa trẻ với một tên nhất định. Tôi hy vọng nó có thể được thực hiện bằng cách sử dụng một cái gì đó dọc theo dòng:Kiểm tra firebase của Google nếu con tồn tại

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 

if (rootRef.childExists("name")) { 
    //run some code 
} 

Tôi đã tìm kiếm nhưng tôi không tìm thấy gì hữu ích. Nhờ sự giúp đỡ trước.

+0

http://stackoverflow.com/a/36826793/3145960 –

+0

có thể trùng lặp của [Understanding nếu dữ liệu tồn tại trong căn cứ hỏa lực] (http://stackoverflow.com/questions/36826429/understanding-if-data-exists-in-firebase) –

Trả lời

42

Chỉnh sửa 2; giá trị đặt trên đầu trang: Tôi nghĩ rằng nó là đáng nói đến là điều này thực sự là tải về tất cả các dữ liệu tại ảnh chụp này chỉ để kiểm tra xem có bất kỳ dữ liệu tồn tại. Bạn nên chú ý ở đây. Nếu tham chiếu quá lớn (ví dụ: thực sự là tham chiếu gốc và không phải là con/thuộc tính cụ thể) thì bạn nên tìm một nút sâu hơn mà bạn có thể sử dụng để kiểm tra sự tồn tại hoặc thiết kế cấu trúc dữ liệu của bạn khác nhau.

Tham chiếu cơ sở dữ liệu thực sự là URL cho dữ liệu đó. Bạn thực sự muốn nhận được dữ liệu để xem liệu một đứa trẻ có tồn tại hay không. Đây là lý do tại sao phương pháp bạn có vẻ đang tìm kiếm là trên DataSnapshot.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    void onDataChange(DataSnapshot snapshot) { 
    if (snapshot.hasChild("name")) { 
     // run some code 
    } 
    } 
}); 

Bây giờ, mẫu thiết kế này có vẻ hơi lạ. Bạn đang đọc toàn bộ cơ sở dữ liệu chỉ để xem liệu "tên" có tồn tại không. Bạn có thể làm điều này hiệu quả hơn một chút bằng cách nghe rootRef.child("name") và sau đó chỉ kiểm tra xem snapshot.exists().

Nếu bạn đang cố gắng thực hiện xác thực tại đây và không kiểm soát luồng, bạn nên cân nhắc việc đặt mã này vào số rules.json của mình.

chỉnh sửa: Tôi ban đầu được sử dụng tên hàm sai (childExists thay vì hasChild)

+0

Chỉ cần làm rõ: Có thể truy cập dữ liệu trên firebase mà không có người nghe không? – zomnombom

+2

Tôi giả sử bạn đang hỏi vì bạn không muốn gọi lại để chạy hơn và hơn. Chữ "đơn" trong đoạn mã trên có nghĩa là nó chỉ kích hoạt một lần. –

+0

Có. Cảm ơn rất nhiều! – zomnombom

1

Hãy thử sử dụng .childexists kết hợp với .equalTo("Your specific name")

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