2016-04-27 11 views
6

के साथ पूछताछ में टाइमआउट को कैसे संभालें मैंने देखा कि यदि मैं फ़ायरबेस में एक क्वेरी निष्पादित करता हूं और डेटाबेस सर्वर पहुंच योग्य नहीं है, तो कॉलबैक हमेशा के लिए प्रतीक्षा करता है (या जब तक सर्वर फिर से पहुंच योग्य नहीं होता)।फायरबेस

जहां यह व्यवहार अतुल्यकालिक दृष्टिकोण के लिए काफी स्वाभाविक है, फिर भी यह एक टाइमआउट निर्दिष्ट करने का एक आसान तरीका होने के लिए उपयोगी होगा ताकि आप उपयोगकर्ता को स्थिति के बारे में सूचित कर सकें।

क्या ऐसा कोई विकल्प है और मैंने इसे अभी याद किया - या यह वास्तव में गायब है? या आप इस समस्या को कैसे हल करेंगे?

+0

यदि आप यह पता लगाने की कोशिश कर रहे हैं कि उपयोगकर्ता फ़ायरबेस सर्वर से कनेक्ट है या नहीं, तो ['.info/connected'] (https://www.firebase.com/docs/web/guide/offline पर एक नज़र डालें -capabilities.html # खंड-कनेक्शन राज्य)। –

+0

एक ही समस्या का सामना कर रहा था। अंत में टाइमरआउट के रूप में चिह्नित करने के लिए क्वेरी के चारों ओर टाइमर डालें। कार्यों को बनाए रखने के लिए बोल्टज़ ढांचे का उपयोग करके पूरी प्रक्रिया करना आसान था (बीएफटीएस्क), विशेष रूप से जहां आप कई प्रश्नों से निपट रहे हैं। – Amit

उत्तर

2

आप अपने आप को एक टाइमर नियंत्रक प्रबंधित कर सकते हैं कि x सेकंड के बाद श्रोता को फ़ायरबेस संदर्भ में हटा दें। यह बहुत आसान है, उदाहरण के लिए एंड्रॉइड में कोड की केवल एक पंक्ति।

आप वेब (Detaching कॉलबैक खंड) के लिए कोड देख सकते हैं: https://www.firebase.com/docs/web/guide/retrieving-data.html

या एंड्रॉयड के लिए (Detaching कॉलबैक अनुभाग): https://www.firebase.com/docs/android/guide/retrieving-data.html#section-detaching

आईओएस के लिए एक ही अनुभाग;)

+0

निरीक्षण SingleEventOfType, इसके साथ हमें एक हैंडल नहीं मिलता है और इसलिए कॉलबैक को अलग करने में सक्षम नहीं होगा। – 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 सेकंड के बाद संवाद चित्र नहीं है क्योंकि यह कनेक्ट नहीं हो सका और आप तो क्या आप समय समाप्ति के अनुसार की क्या ज़रूरत है firebase के लिए अनुरोध करने ।

Firebase श्रोता की कॉलबैक पर आप इस showProgressDialog कर (गलत, 0)

आशा है कि यह मदद करता है।