2013-03-25 35 views
12

Tôi đã nhìn thấy một số mã tìm kiếm thực sự xấu xí từ những người viết lên các phương pháp riêng của họ chuyển đổi một HttpResponse đến một chuỗi để sử dụng sau này, mà trông giống như sau:làm thế nào để tôi nhận được chuỗi từ android phản hồi http của tôi?

httppost.setEntity(new UrlEncodedFormEntity(valuePairs)); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF8"),8); 
StringBuilder sb = new StringBuilder(); 
sb.append(reader.readLine() + "\n"); 
String line="0"; 
while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
} 
is.close(); 
String result = sb.toString(); 

không chỉ là một chút của một mớ hỗn độn , nhưng nó thực sự xấu xí và tôi thường không thể nói những gì đang xảy ra với mã bởi vì mớ hỗn độn này đứng trước nó. Có cách nào tốt hơn để làm điều này không?

Trả lời

42

CÓ, CÓ! BẠN CÓ THỂ LÀM TẤT CẢ NHỮNG GÌ TRONG MỘT DÒNG! Chỉ cần như thế này:

response = client.execute(post); 
String responseStr = EntityUtils.toString(response.getEntity()); 

hạnh phúc ứng dụng làm

+0

Có một vấn đề với điều này. Nếu đáp ứng được gzipped, điều này sẽ không hoạt động. Bạn phải gọi 'InputStream stream = AndroidHttpClient.getUngzippedContent (response.getEntity());' và sau đó chuyển đổi InputStream thành một chuỗi. Tôi chưa tìm được cách nào tốt hơn. –

+1

có thể hoạt động trong năm 2013, nhưng vào năm 2016 thì không! đây là lỗi của tôi -> Phương pháp đã ném ngoại lệ 'java.lang.IllegalStateException'. – delive

4

tôi đã làm nó với xử lý phản hồi từ HttpClient.execute documentation. Sử dụng trình xử lý làm tham số thứ hai cho phương thức .execute định nghĩa trong định dạng phản hồi nên là gì.
Mã của tôi là như folows:

HttpClient client = new DefaultHttpClient(); 

     HttpGet request = new HttpGet(params[0]); 
     ResponseHandler<String> handler = new BasicResponseHandler(); 
     String response = ""; 
     try { 
      response = client.execute(request, handler); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

params[0] là một URL trong hình thức của một chuỗi. Có thể quan trọng là máy chủ của tôi trả về phản hồi bằng JSON. Vì vậy, cuối cùng tôi chuyển đổi chuỗi response thành JSON.

+0

Hoạt động tuyệt vời đối với tôi, máy chủ xác thực mã khuyến mại của tôi trả lại chuỗi đơn giản "VALID" hoặc "INVALID". –

Các vấn đề liên quan