2012-02-26 57 views
5

我有一個問題,我想解析Web上的XML文件。現在我的HttpResponce讀取的XML文件太多,所以我得到了錯誤「成爲運行時錯誤」爲我的GUI。Android中的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 2012-02-26 21:46:27

+0

只是一個側面說明,考慮使用StreamReader而不是EntityUtils.toString,以提高內存使用率。 – yorkw 2012-02-26 22:43:32

+0

@ yorkw你有什麼可以支持的嗎?我正在使用EntityUtils .. – nhaarman 2012-02-26 23:12:29

回答

3

正如在UI的設計不僅Android的一般規則,你應該移動到後臺線程任何重型加工/耗時的任務。

有很好的設施可以幫助您在後臺執行長期任務,並將其最終/中間結果發佈到Android的UI線程中,如AsyncTaskHandlers

1

除了什麼Binyamin Sharet說,有special mode你可以使用在開發,可以捕捉這樣的設計錯誤。

StrictMode最常用於在應用程序的主線程中捕獲意外的磁盤或網絡訪問,其中接收UI操作並進行動畫操作。保持主線程不受磁盤和網絡操作影響,可以提供更平滑,更響應的應用程序。通過保持應用程序的主線程響應,您還可以阻止向用戶顯示ANR對話框。

1

由於您未向Web服務器發送任何參數,因此您希望使用HTTP GET請求而不是POST。

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);