0
我對實時數據庫的請求實施了一個簡單的超時系統。Firebase實時數據庫超時
private void makeRequestWithTimeout(final int timeout, final DatabaseReference reference, final OnTimeoutRequestListener listener) {
Thread thread = new Thread() {
boolean connected = false;
boolean exited = false;
@Override
public void run() {
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!exited) {
listener.onSuccess(dataSnapshot);
connected = true;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
if (!exited) {
listener.onFailure(databaseError.toException());
connected = true;
}
}
});
try {
sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!connected) {
listener.onFailure(new Exception("Timeout, request exceeded " + timeout + "ms timeout"));
exited = true;
}
}
};
thread.start();
}
我需要這個,因爲我要檢查,如果例如用戶名已經被佔用了,我不想,如果我不能從DB獲得的值進行。
好了,所以我覺得這個工作不錯,但以下情形不工作:
當我在飛行模式下做出的請求時,超時異常火災預期。然後我禁用飛行模式併發出另一個請求。我得到另一個超時異常。
編輯:這會持續2分鐘,直到請求再次成功。
打開數據庫日誌記錄,似乎它甚至不嘗試獲取值。
我也讀過this。
有什麼我可以做的嗎?
感謝您對此進行測試。我確實使用9.8.0,因爲我目前正在模擬器上測試我的構建。 (Android模擬器無法更新谷歌播放服務:()因爲我沒有在變更日誌中找到任何提示,所以我沒有嘗試。 我有一個今天有10.0.1可用的android手機,我可以確認在重新連接後它會更快,但仍然不理想,但是更好的是什麼都沒有。謝謝 – stulleman
經過進一步調查,我看到Android Studio API 23圖像安裝了Google Play Services 10.0.1 但是不幸的是,同樣的問題。似乎是一個模擬器問題。 – stulleman