2017-06-05 27 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程序中返回。阅读他原来的帖子和第二篇文章中的评论。 –