2012-05-30 30 views
-1

我想讀取緩衝區(android應用程序)並將其值設置爲我的TextView'httpStuff'。但我不認爲我得到了一些來自URI的迴應。HttpResponse和BufferedReader

我沒有得到任何運行時錯誤。我嘗試了許多相同邏輯的味道。似乎沒有任何工作。

INTERNET權限已在清單中設置。 SdkVersion="15"。任何幫助?

HttpClient client = new DefaultHttpClient(); 
URI website = new URI("http://www.mybringback.com"); 
HttpGet request = new HttpGet(); 
request.setURI(website); 
HttpResponse response = client.execute(request); 
HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); 
BufferedReader in = new BufferedReader(new InputStreamReader(is)); 

httpStuf.setText(in.readLine()); 
+0

我在Oncreate()中添加了下面的代碼,它工作正常!因爲API Level 11不允許在UI線程上執行網絡操作(包括HttpClient和HttpUrlConnection)。如果你這樣做,你會得到NetworkOnMainThreadException。 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。build(); StrictMode.setThreadPolicy(policy); – user1425108

回答

0

想方設法把response狀態代碼,然後你可以用(HTTP status

int responseCode=response.getStatusLine().getStatusCode()

2

我認爲你缺少while循環,也比較,當你說只有in.readLine() ,可能是它從響應中返回了一個空行,雖然它有足夠的數據。所以請確保完全按照這樣讀取閱讀器並檢查其內容。

while ((line = rd.readLine()) != null) { 
    httpStuf.setText(line+"\r\n"); 
} 

希望這會對你有幫助。

0

此代碼爲我工作

InputStream is = response.getEntity().getContent(); 
    String strResponse = inputStreamToString(is); 


private String inputStreamToString(InputStream is) 
{ 

    String line = ""; 
    StringBuilder total = new StringBuilder(); 
    // Wrap a BufferedReader around the InputStream 
    BufferedReader rd = new BufferedReader(new InputStreamReader(is), 1024 * 4); 
    // Read response until the end 
    try 
    { 

     while ((line = rd.readLine()) != null) 
     { 
      total.append(line); 
     } 
    } catch (IOException e) 
    { 
     Log.e(TAG, "error build string" + e.getMessage()); 
    } 
    // Return full string 
    return total.toString(); 
} 
+0

我在Oncreate()中添加了下面的代碼,它工作!因爲API Level 11不允許在UI線程上執行網絡操作(包括HttpClient和HttpUrlConnection)。如果你這樣做,你會得到NetworkOnMainThreadException。 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。build(); StrictMode.setThreadPolicy(政策); – user1425108

+0

你可以使用AsyncTask來解決這個問題。這裏是一個例子:http://stackoverflow.com/a/8706638/719212 – R4j

0

我使用這個方法簡單地趕上HTTP響應,它爲我工作得很好。

public String httpGetResponse(String url) { 
     try { 
      Log.i("HTTP Request", "httpGet Request for : " + url); 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet get = new HttpGet(url); 
      //get.setHeader("Connection", "keep-alive"); 

      HttpResponse response = client.execute(get); 

      InputStream is = response.getEntity().getContent(); 
      BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(is)); 
      StringBuilder str = new StringBuilder(); 

      String line = null; 

      while ((line = bufferedReader.readLine()) != null) { 
       str.append(line + "\n"); 
      } 
      return str.toString(); 
     } catch (Exception e) { 
      Log.e("HTTP error", "Error in function httpGetResponse : " 
        + e.getMessage()); 
      return null; 
     } 
    } 
+0

我在Oncreate()中添加了下面的代碼,它工作!因爲API Level 11不允許在UI線程上執行網絡操作(包括HttpClient和HttpUrlConnection)。如果你這樣做,你會得到NetworkOnMainThreadException。 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。build(); StrictMode.setThreadPolicy(政策); – user1425108