2012-02-26 68 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);