2010-01-12 17 views
16

के माध्यम से NoHttpResponseException मुझे अपने एंड्रॉइड ऐप मिला है जो मेरे टोमकैट पर तैनात मेरे सर्वलेट तक पहुंचने के लिए एचटीपी क्लाइंट का उपयोग करता है। यह मेरे एचटीसी जादू पर स्थापित है।एंड्रॉइड पर एचटीपी क्लाइंट: यूएमटीएस/3 जी

यदि मैं वाईफ़ाई से कनेक्ट होने पर इसे लॉन्च करता हूं: यह काम करता है। यदि मैं 3 जी (जीएसएम डेटा नेटवर्क) से कनेक्ट होने पर इसे लॉन्च करता हूं: यह काम नहीं करता है लेकिन मेरा सर्वलेट पहुंच गया है। दूसरे शब्दों में, ऐसा लगता है कि मेरे फोन कभी नहीं प्रतिक्रिया मिल: यदि मैं 3 जी के माध्यम से वेब ब्राउज़र का उपयोग है कि मेरे सर्वलेट के साथ पैक किया जाता है परीक्षण HTML पृष्ठ को सक्रिय करने के

Technical problem while receiving response. 
org.apache.http.NoHttpResponseException: The target server failed to respond 
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85) 
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) 
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 

, यह सफलता के साथ ही सर्वलेट (तक पहुँच जाता है पृष्ठ प्रतिक्रिया प्राप्त करता है)।

मैं एचटीपी क्लाइंट को कैसे डिबग कर सकता हूं या सबकुछ डंप करने के लिए कह सकता हूं?

क्या किसी के पास क्या चल रहा है इस पर कोई संकेत है?

+0

क्या आपने यह जांचने के लिए अपने सर्वर लॉग की जांच की है कि अनुरोध तार पर बना रहा है या नहीं? यदि हां, तो क्या आपके लॉग आपको कुछ बताते हैं (उदा।, सर्वर-साइड त्रुटि)? – CommonsWare

+0

सर्वर को अनुरोध (बहुत तेज़ी से) मिलता है और सफलतापूर्वक प्रतिक्रिया देता है, वैसे ही यह वाईफाई पर आने वाले अनुरोध के लिए भी करता है। यह एचटीपी क्लाइंट को डीबग करने में सक्षम होने के लिए और अधिक कुशल होगा ... अपवाद को लंबे समय के बाद, कम या कम 10 मिनट के बाद फेंक दिया जाता है, इसलिए मुझे लगता है कि वास्तव में डिवाइस पर वापस आने वाला कुछ भी नहीं है। यदि सच है, तो हवा में मेरी प्रतिक्रिया खो रही है। क्या मेरे जीएसएम नेटवर्क में कुछ फ़िल्टरिंग हो सकती है? – Hubert

+0

दिलचस्प बात यह है कि proxy.cwg.net पर एक स्क्विड सर्वर स्थापित है जो कारण प्रतीत होता है। लेकिन यह परीक्षण एचटीएमएल पेज के साथ क्यों काम करता है, न कि एचटीपी क्लाइंट के साथ एक ही स्थिति में? – Hubert

उत्तर

11

मैं अंत में इस समस्या से छुटकारा मिला: बस एक HTTP हेडर कि बुरी तरह से सड़क पर एक व्यंग्य सर्वर द्वारा संचालित किया गया था:

अपेक्षा: 100-जारी

यह वहाँ हो रहा है डिफ़ॉल्ट रूप से एंड्रॉइड एसडीके पर DefaultHttpClient के साथ। इससे निपटने के लिए, बस इसे अपने कोड में जोड़ें:

HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false); 
13

मैं इस मुद्दे में भी भाग गया। यह केवल प्रारंभिक http अनुरोध पर, आमतौर पर sporadically हुआ। बाद के अनुरोध ठीक काम करेंगे। SetUseExpectContinue जोड़ना काम नहीं लग रहा था। (आइस क्रीम सैंडविच में तय)

 HttpProtocolParams.setUseExpectContinue(client.getParams(), false); 

     HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() { 

      public boolean retryRequest(IOException exception, int executionCount, 
        HttpContext context) { 
       // retry a max of 5 times 
       if(executionCount >= 5){ 
        return false; 
       } 
       if(exception instanceof NoHttpResponseException){ 
        return true; 
       } else if (exception instanceof ClientProtocolException){ 
        return true; 
       } 
       return false; 
      } 
     }; 
     client.setHttpRequestRetryHandler(retryHandler); 
+0

यह वास्तव में मेरी समस्या है .. दुर्भाग्य से, सर्वर को पहला अनुरोध मिलता है और कुछ राज्य बदलता है .. उसी अनुरोध को फिर से भेजना वास्तव में चीजें बोर्क करता है .. – danb

+0

@PTG मेरे मामले में काम नहीं कर रहा है। मैंने अधिकतम निष्पादन सेट किया है ताकि यह जांच सके कि कितने रिट्रीज़ के बाद काम करता है या नहीं। लेकिन ऐसा नहीं हुआ। कोई अन्य विचार? बीटीडब्ल्यू, मैं इसे प्रॉक्सी के साथ उपयोग करता हूं और फिर केवल यह अपवाद प्राप्त करता हूं। – Geek

3

एंड्रॉयड एक बग जहां HTTPS DNS खोज रिवर्स कर दिया था

:

मेरे मामले में समाधान एक पुनः प्रयास हैंडलर कि विशिष्ट अपवाद पर पुनः अनुरोध हैं जोड़ने के लिए था

http://code.google.com/p/android/issues/detail?id=13117 ने मेरे फ़ोन पर काम करने वाले एक काम का उल्लेख किया।

संबंधित मुद्दे