2016-06-08 22 views
9

Khi ứng dụng của tôi bắt đầu, tôi kiểm tra chi tiết người dùng hiện tại trong cơ sở dữ liệu Firebase của tôi (tôi đang lưu trữ nó uid cho điều đó).Firebase Android addListenerForSingleValueEvent đôi khi không trả lại dữ liệu

Tôi đang gắn addListenerForSingleValueEvent vào ref của người dùng để đọc dữ liệu của nó.

Vấn đề của tôi là đôi khi, nó không trả về bất kỳ giá trị nào, không thành công hay thất bại.

Chỉ xóa dữ liệu của ứng dụng giải quyết nó, nhưng tất nhiên buộc người dùng phải đăng nhập lại.

Tôi đã đọc một số bài đăng tại SO, nhưng không tìm thấy giải pháp nào.

Dưới đây là mảnh của tôi mã:

DatabaseReference newUser =  
FirebaseDatabase.getInstance().getReference("users/"+uid); 
newUser.addListenerForSingleValueEvent(new ValueEventListener()  
    @Override 
    public void onDataChange(DataSnapshot snapshot) {} 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Quick câu hỏi: bạn có đang sử dụng xác thực không? Bạn đang truy cập nhiều cơ sở dữ liệu trong cùng một ứng dụng (hoặc trước đó bạn đã sử dụng cùng một ứng dụng để truy cập cơ sở dữ liệu khác)? –

+0

Có Tôi đang sử dụng xác thực. Tôi chỉ truy cập một cơ sở dữ liệu. BTW, thậm chí khởi động lại thiết bị cũng không giải quyết được. – Adi

+0

Sự cố đó chỉ bắt đầu sau khi tôi bắt đầu sử dụng SDK mới. – Adi

Trả lời

5

Các đề xuất mà tôi đã nhìn thấy việc này là để gọi keepSynced(true) trên đối tượng Query.

+0

Tôi có cùng một vấn đề với addListenerForSingleValueEvent, là lần đầu tiên khi ứng dụng được khởi chạy, cuộc gọi của nó đúng cách nhưng lần sau khi tôi quay lại ứng dụng, nó không gọi bất kỳ phương thức ghi đè nào. tôi đã cố gắng giữ liên tục và công việc của nó ngay bây giờ. –

+0

nhưng thực tế là có vấn đề với SDK mới –

0

Đoán của tôi là user/:id không tồn tại. Kiểm tra kỹ lỗi xuất của bạn:

DatabaseReference newUser = FirebaseDatabase.getInstance() 
    .getReference("users") 
    .child(uid) 
    .addListenerForSingleValueEvent(new ValueEventListener()  
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (snapshot.exists()) { 
       Log.i(TAG, snapshot.val()); 
      } else { 
       Log.e(TAG, "Not found: " + uid); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e(TAG, databaseError.toString(); 
     } 
    }); 
-1

Tôi đã gặp vấn đề tương tự trong nhiều ngày và cuối cùng tôi đã sửa nó.

Có vẻ như khóa Api của tôi đã được thay đổi! Và đó là những gì đang ngăn cản addListenerForSingleValueEvent() quay trở lại!
Đi tới Firebase Console, mở dự án của bạn, nhấp vào biểu tượng cài đặt gear icon và truy cập Cài đặt dự án. Ở đó bạn sẽ thấy Web API Key. Hãy lấy nó và sao chép nó vào tập tin google-services.json trong thư mục của dự án của bạn. Đây là một đoạn trích từ tệp đó:

... 
    ], 
    "api_key": [ 
    { 
     "current_key": "<COPY Web Api Key HERE>" 
    } 
    ], 
    ... 

Vậy đó. Sau khi thay thế giá trị của "current_key" bằng khóa từ Firebase, nó quay trở lại hoạt động (trước đây nó có một số khóa khác mà tôi nghĩ rằng tôi đã tạo tại Google Console và nó hoạt động trong nhiều tháng. Chỉ một vài ngày trước nó ngừng hoạt động)

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