2012-02-26 12 views
5

मुझे एक समस्या है कि मैं वेब पर एक एक्सएमएल फ़ाइल को पार्स करना चाहता हूं। अब मेरा HttpResponce बहुत अधिक समय प्राप्त करता है कि एक्सएमएल फ़ाइल, इसलिए मुझे अपने जीयूआई के लिए त्रुटि "रनटाइम त्रुटि बनें" त्रुटि मिलती है।एंड्रॉइड में HttpResponse

try { 

     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost("http://chukk.nuzoka.com/name.xml"); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 

     HttpEntity httpEntity = httpResponse.getEntity(); 
     line = EntityUtils.toString(httpEntity); 


    } catch (UnsupportedEncodingException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } catch (MalformedURLException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } catch (IOException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } 

किसी भी मदद की सराहना की है :)

+0

क्या आप इसे एक अलग थ्रेड में सही कर रहे हैं? – L7ColWinters

+0

बस एक साइड नोट, स्मृति उपयोग सुधार के लिए EntityUtils.toString के बजाय StreamReader का उपयोग करने पर विचार करें। – yorkw

+0

@yorkw क्या आपको इसे वापस करने के लिए कुछ मिला है? मैं EntityUtils का उपयोग कर रहा हूं .. – nhaarman

उत्तर

3

यूआई प्रोग्रामिंग, न केवल एंड्रॉयड में एक सामान्य नियम के रूप में, आप एक पृष्ठभूमि पर जाना चाहिए थ्रेड का कोई प्रयास प्रसंस्करण/समय लेने वाला कार्य।

इसके लिए अच्छी सुविधाएं हैं जो आपको पृष्ठभूमि में लंबे कार्य करने में मदद करती हैं और एंड्रॉइड में यूआई थ्रेड में अपने अंतिम/मध्यवर्ती परिणामों को पोस्ट करने में मदद करती हैं, जैसे AsyncTask और Handlers

1

क्या Binyamin Sharet कहा के अलावा, वहाँ एक special mode विकास है कि इस तरह डिजाइन त्रुटियों पकड़ कर सकते हैं के दौरान आप का उपयोग कर सकते है।

स्ट्रिक्टोड का उपयोग आमतौर पर एप्लिकेशन के मुख्य थ्रेड पर आकस्मिक डिस्क या नेटवर्क पहुंच को पकड़ने के लिए किया जाता है, जहां यूआई ऑपरेशंस प्राप्त होते हैं और एनिमेशन होते हैं। मुख्य धागे से डिस्क और नेटवर्क संचालन को रखना बहुत चिकना, अधिक उत्तरदायी अनुप्रयोग बनाता है। अपने एप्लिकेशन के मुख्य थ्रेड को उत्तरदायी रखते हुए, आप एएनआर संवाद को उपयोगकर्ताओं को दिखाए जाने से भी रोकते हैं।

1

आप पोस्ट के बजाय HTTP GET अनुरोध का उपयोग करना चाहते हैं क्योंकि आप वेब सर्वर पर कोई पैरामीटर पोस्ट नहीं कर रहे हैं।

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpGet request = new HttpGet(); 
request.setURI(new URI("http://chukk.nuzoka.com/name.xml")); 
HttpEntity httpEntity = httpResponse.getEntity(); 
line = EntityUtils.toString(httpEntity); 
संबंधित मुद्दे