2016-04-27 67 views
6

我注意到如果我在Firebase中執行查詢並且數據庫服務器無法訪問,則回調會一直等待(或直到服務器再次可達)。如何處理使用Firebase的查詢中的超時

如果這種行爲對於使用的異步方法來說非常自然,那麼有一個簡單的方法來指定超時值,以便您可以通知用戶狀態。

有沒有這樣的選擇,我只是錯過了 - 或真的失蹤? 或者你會如何解決這個問題?

+0

如果您嘗試檢測用戶是否連接到Firebase服務器,請查看['.info/connected'](https://www.firebase.com/docs/web/guide/offline -capabilities.html#部連接狀態)。 –

+0

正面臨同樣的問題。最後在查詢周圍放置計時器以將其標記爲超時。整個過程很容易使用Boltz框架來維護任務(BFTask),尤其是在您處理多個查詢的情況下。 – Amit

回答

2

您可以管理自己的計時器控制器,在x秒後將聽衆移除給您的firebase參考。這是非常簡單的,只是在android中的一行代碼。

你可以看到代碼的網頁(拆卸回調部分): https://www.firebase.com/docs/web/guide/retrieving-data.html

或爲Android(拆卸回調部分): https://www.firebase.com/docs/android/guide/retrieving-data.html#section-detaching

同一節IOS)

+0

observeSingleEventOfType,在這個我們沒有得到一個句柄,因此將無法分離回調。 – Amit

2

由於今天,這些聽衆沒有超時概念。一種選擇是自己管理超時。

這是我如何做,當我也想要加載內容時顯示進度對話框。

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){ 
    } 
} 

所以,當你做出火力調用showProgressDialog(真,5000)和5秒後,如果對話框劇照存在,因爲它無法連接,然後你做什麼,你必須爲每超時的請求。

在火力地堡聽者的回調你這樣做showProgressDialog(假,0)

希望它能幫助。