2016-04-27 19 views
6

Tôi nhận thấy rằng nếu tôi thực hiện truy vấn trong Firebase và máy chủ cơ sở dữ liệu không thể truy cập được, cuộc gọi lại chỉ đợi mãi mãi (hoặc cho đến khi máy chủ có thể truy cập lại).Làm thế nào để xử lý thời gian chờ trong các truy vấn với Firebase

Trường hợp hành vi này là khá tự nhiên đối với cách tiếp cận không đồng bộ được sử dụng, nó sẽ hữu ích để có một cách dễ dàng để chỉ định thời gian chờ để bạn có thể thông báo cho người dùng về trạng thái.

Có tùy chọn như vậy và tôi vừa bỏ lỡ - hoặc nó thực sự bị thiếu? Hoặc bạn giải quyết vấn đề này như thế nào?

+0

Nếu bạn đang cố gắng phát hiện xem người dùng có được kết nối với máy chủ Firebase hay không, hãy xem ['.info/connected'] (https://www.firebase.com/docs/web/guide/offline -capabilities.html # section-connection-state). –

+0

Đang đối mặt với cùng một vấn đề. Cuối cùng, đặt bộ hẹn giờ xung quanh truy vấn để đánh dấu nó là thời gian chờ. Toàn bộ quá trình được dễ dàng để làm bằng cách sử dụng Boltz khuôn khổ cho việc duy trì nhiệm vụ (BFTask), đặc biệt trong trường hợp bạn đang đối phó với nhiều truy vấn. – Amit

Trả lời

2

bạn có thể tự quản lý bộ điều khiển bộ hẹn giờ sau x giây xóa trình nghe cho bạn tham chiếu firebase. Nó rất đơn giản, chỉ một dòng mã trong android chẳng hạn.

Bạn có thể xem mã cho web (Khi kèm Callback mục): https://www.firebase.com/docs/web/guide/retrieving-data.html

hay cho android (Khi kèm Callback mục): https://www.firebase.com/docs/android/guide/retrieving-data.html#section-detaching

cùng phần cho IOS;)

+0

observSingleEventOfType, với điều này chúng tôi không nhận được một xử lý và do đó sẽ không thể tách rời cuộc gọi lại. – Amit

2

Như mỗi ngày hôm nay không có khái niệm thời gian chờ trên những người nghe đó. Một tùy chọn là tự quản lý thời gian chờ.

Đây là cách tôi thực hiện khi tôi cũng muốn hiển thị hộp thoại tiến trình trong khi tải nội dung.

private void showProgressDialog(boolean show, long time) { 
    try { 
     if (progressDialog != null) { 
      if (show) { 
       progressDialog.setMessage("Cargando..."); 
       progressDialog.show(); 
       new Handler().postDelayed(new Runnable() { 
        public void run() { 
         if(progressDialog!=null && progressDialog.isShowing()) { 
          progressDialog.dismiss(); 
          Toast.makeText(ActPreguntas.this, "Couldn't connect, please try again later.", Toast.LENGTH_LONG).show(); 
         } 
        } 
       }, time); 
      } else { 
       progressDialog.dismiss(); 
      } 
     } 
    }catch(IllegalArgumentException e){ 
    }catch(Exception e){ 
    } 
} 

Vì vậy, khi bạn thực hiện một yêu cầu căn cứ hỏa lực bạn gọi showProgressDialog (true, 5000) và sau 5 giây nếu ảnh tĩnh thoại có là bởi vì nó không thể kết nối và sau đó bạn làm những gì bạn phải theo thời gian chờ .

Khi gọi lại trình nghe Firebase, bạn thực hiện điều này showProgressDialog (false, 0)

Hy vọng điều đó sẽ hữu ích.

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