2012-10-27 44 views
5

Tôi đang cố gắng triển khai lớp httpClient là một AsyncTask (nếu không tôi nhận được ngoại lệ do có kết nối trong chuỗi chính của mình). Tôi đã thử một cái gì đó như thế này:Android Async Http Nhận yêu cầu

private class execHttpAsync extends AsyncTask <String, String, HttpResponse> 
    { 
     public String resultString; 

     @Override 
     protected HttpResponse doInBackground(String... params) 
     { 
      String url = params[0]; 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(url);   
      request.setHeader("Content-Type", "text/xml"); 
      HttpResponse response; 
      try { 
       response = httpClient.execute(request); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return response; 
     } 

     @Override 
     protected void onPostExecute(HttpResponse result) 
     { 
      StringBuffer returned = new StringBuffer(); 

      InputStream content = result.getEntity().getContent(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(content, "UTF-8"));     
      String line; 
      while ((line = rd.readLine()) != null) 
      { 
       String endOfLine = ""; 
       returned.append(line + endOfLine); 
      } 
      content.close(); 

     String retVal = returned.toString(); 

     try 
     { 
      String header = retVal.substring(0, 1); 
      if (!header.equals("<")) 
       { 
       retVal = retVal.replace(header, ""); 
       } 
     } 
     catch (Exception e) 
     { 
      // TODO: handle exception 
     } 

     resultString = returned.toString(); 

     } 

    } 

Nhưng tôi cần nhận được phản hồi cuối cùng. Tôi đã cố gắng để nhanh chóng lớp này và sau đó nhận được phản ứng như là một thành viên nhưng điều đó đã không làm việc ra ngoài. Bất kỳ đề xuất nào?

+0

Bạn đang gặp phải loại lỗi nào? Bạn không nhận được kết quả? Đăng một stacktrace nếu có. –

Trả lời

12

thử cách này

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     String response = ""; 
     for (String url : urls) { 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     try { 
      HttpResponse execute = client.execute(httpGet); 
      InputStream content = execute.getEntity().getContent(); 

      BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) { 
      response += s; 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     textView.setText(result); 
    } 
    } 
1

là hoạt động không đồng bộ này, do đó bất cứ điều gì như:

myRetValue = new myAsyncTask.execute(); 

sẽ KHÔNG gán giá trị trả về từ onPostExecute() để myRetValue. Bạn

resultString = returned.toString(); 

nên kết quả trong có bất cứ điều gì returned.toString() được sản xuất giao cho resultString biến (mà tôi đoán được khai báo bên ngoài lớp AsyncTask của bạn, vì vậy về cơ bản mã của bạn có vẻ tốt đẹp ở cái nhìn đầu tiên. Bạn có thể chỉ đơn giản là không có bất cứ điều gì trong returned. Hãy thử trồng một số điểm ngắt trong mã AsyncTask của bạn và kiểm tra xem nó có thực sự hoạt động như bạn nghĩ không.

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