2012-02-26 24 views
5

Tôi gặp sự cố khi tôi muốn phân tích cú pháp tệp XML trên web. Bây giờ tôi HttpResponce được quá nhiều thời gian quá đọc rằng tập tin XML, vì vậy tôi nhận được lỗi "Trở thành Runtime Error" cho GUI của tôi.HttpResponse trong Android

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>"; 
    } 

Any help is appreciated :)

+0

bạn làm điều này theo chủ đề riêng biệt phải không? – L7ColWinters

+0

Chỉ cần một lưu ý phụ, hãy xem xét sử dụng StreamReader thay vì EntityUtils.toString, để cải thiện mức sử dụng bộ nhớ. – yorkw

+0

@yorkw Bạn có gì để sao lưu điều đó không? Tôi đang sử dụng EntityUtils .. – nhaarman

Trả lời

3

Theo nguyên tắc chung trong lập trình giao diện người dùng, không chỉ dành cho Android, bạn nên di chuyển đến một nền sợi bất kỳ nặng chế biến/tốn thời gian công việc.

Có các tiện ích tốt giúp bạn thực hiện tác vụ dài trong nền và đăng kết quả cuối cùng/trung gian của mình lên chuỗi giao diện người dùng trong Android, chẳng hạn như AsyncTaskHandlers.

1

Ngoài những gì Binyamin Sharet cho biết, có special mode bạn có thể sử dụng trong quá trình phát triển có thể bắt lỗi thiết kế như thế này.

StrictMode được sử dụng phổ biến nhất để truy cập ổ đĩa ngẫu nhiên hoặc truy cập mạng trên chuỗi chính của ứng dụng, nơi nhận được hoạt động giao diện người dùng và hoạt ảnh. Việc duy trì hoạt động của ổ đĩa và mạng ngoài luồng chính khiến cho các ứng dụng nhạy hơn, mượt mà hơn. Bằng cách duy trì chủ đề chính của ứng dụng, bạn cũng ngăn không cho các hộp thoại ANR hiển thị cho người dùng.

1

Bạn muốn sử dụng yêu cầu HTTP GET thay vì POST vì bạn không đăng bất kỳ thông số nào lên máy chủ web.

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); 
Các vấn đề liên quan