我注意到如果我在Firebase中執行查詢並且數據庫服務器無法訪問,則回調會一直等待(或直到服務器再次可達)。如何處理使用Firebase的查詢中的超時
如果這種行爲對於使用的異步方法來說非常自然,那麼有一個簡單的方法來指定超時值,以便您可以通知用戶狀態。
有沒有這樣的選擇,我只是錯過了 - 或真的失蹤? 或者你會如何解決這個問題?
我注意到如果我在Firebase中執行查詢並且數據庫服務器無法訪問,則回調會一直等待(或直到服務器再次可達)。如何處理使用Firebase的查詢中的超時
如果這種行爲對於使用的異步方法來說非常自然,那麼有一個簡單的方法來指定超時值,以便您可以通知用戶狀態。
有沒有這樣的選擇,我只是錯過了 - 或真的失蹤? 或者你會如何解決這個問題?
您可以管理自己的計時器控制器,在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)
observeSingleEventOfType,在這個我們沒有得到一個句柄,因此將無法分離回調。 – Amit
由於今天,這些聽衆沒有超時概念。一種選擇是自己管理超時。
這是我如何做,當我也想要加載內容時顯示進度對話框。
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)
希望它能幫助。
如果您嘗試檢測用戶是否連接到Firebase服務器,請查看['.info/connected'](https://www.firebase.com/docs/web/guide/offline -capabilities.html#部連接狀態)。 –
正面臨同樣的問題。最後在查詢周圍放置計時器以將其標記爲超時。整個過程很容易使用Boltz框架來維護任務(BFTask),尤其是在您處理多個查詢的情況下。 – Amit