2017-06-05 62 views
-1

我發現了一個工作代碼,用於在這裏製作簡單的HTTP請求,從How can I make a simple HTTP request in MainActivity.java? (Android Studio)開始,我將在下面發佈它(有一些更改,如果我沒有錯,現在需要使用try{} catch{})。但是我想問一下如何獲得內容?我在下面的方式與代碼打交道:發出簡單的HTTP請求並接收內容

GetUrlContentTask req = new GetUrlContentTask(); 
req.execute("http://192.168.1.10/?pin=OFF1"); 
textView3.setText(req.doInBackground("http://192.168.1.10/?pin=OFF1")); 

GetUrlContentTask

private class GetUrlContentTask extends AsyncTask<String, Integer, String> { 
    protected String doInBackground(String... urls) { 
     // String content1 = ""; 
     try { 
      URL url = new URL(urls[0]); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      connection.setDoOutput(true); 
      connection.connect(); 


      BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      String content = "", line; 
      while ((line = rd.readLine()) != null) { 
       content += line + "\n"; 
      } 
      // content1 = content; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // return content1; - returns "", wrong 
     return "aaa"; 
     //does not work return content; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
    } 

    protected void onPostExecute(String result) { 
     // this is executed on the main thread after the process is over 
     // update your UI here  
    } 
} 
+0

你期待什麼樣的反應概念的證明 - 一個JSON對象? – Barns

+0

我建議你使用[Retrofit](http://square.github.io/retrofit/) – fn5341

+0

@ Barns52我期望純HTML文本。 – Czarek

回答

0

添加到您的onPostExecute(String result)通話

protected void onPostExecute(String result) { 
     // this is executed on the main thread after the process is over 
     // update your UI here  
     setMyData(result); 
    } 

然後填寫你的文本字段或任何其它數據都需要更新。

private void setMyData(String result){ 
     textView3.setText(result); 
    } 
0

你到底在哪裏卡住了?您的代碼大部分都是正確的,但您可能需要稍微重新排列它。你的範圍是有點關閉,你的評論代碼幾乎到達那裏。見下面

protected String doInBackground(String... urls) { 
    String content = "", line = ""; 
    HttpURLConnection httpURLConnection; 
    BufferedReader bufferedReader; 
    URL url; 

    try { 
     for(String uri : urls) { 
      url = new URL(uri); 
      url = new URI(url.toURI().getScheme(), url.getAuthority(), url.getPath(), "pin=" + URLEncoder.encode("&OFF1", "UTF-8"), null).toURL(); 

      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("GET"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.connect(); 


      bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); 
      while ((line = bufferedReader.readLine()) != null) { 
       content += line + System.lineSeparator(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      bufferedReader.close(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    return content; 

} 

這將返回頁面的字符串表示形式。如果頁面包含HTML,它將返回text/html,如果它包含文本,它將只返回文本。

然後,作爲前一個用戶說,你可以設置你的GUI

protected void onPostExecute(String result) { 
    textView3.setText(result); 
} 

上面的示例將在技術上的工作響應。不過,我強烈推薦使用HttpURLConnection上的http://loopj.com/android-async-http/。你的代碼會更好,這將是重要的。

,我送你的代碼假設參數始終PIN = OFF1,因爲它更

+0

該代碼在「」上設置textView3文本。有什麼更多的錯誤在線:'bufferedReader.close();'「bufferedReader可能沒有被初始化」。如果我嘗試'BufferedReader bufferedReader = null;'然後我收到未處理的異常行'bufferedReader.close();' – Czarek

+0

因此,您的OP中的語句 「我找到了一個簡單的HTTP請求的工作代碼」不工作。您的OP中的問題已得到解答 - 正確 - 您需要針對您提到的有關錯誤的問題開一個新問題。將錯誤消息添加到該帖子。 – Barns

+0

除了你的代碼不起作用,並且如果你回去閱讀,它實際上並沒有解決這個問題。問題實際上是使用get參數。該代碼正在處理我的本地環境,因爲我的測試用例中沒有獲取參數,並且我的編譯錯誤設置配置不同。我建議你回過頭來看看這個問題,因爲你的解決方案甚至沒有解決他所擁有的問題,即在瀏覽器中返回值,而不是在他的Java程序中返回。閱讀他原來的帖子和第二篇文章中的評論。 –