2016-11-30 59 views
0

我试图通过按钮访问Apache服务器。用于Android开发的HTTP发布请求 - 帮助调试

我正在向服务器发送消息并收到消息。我在文本字段上显示该消息。

我的代码不工作,我不知道如何调试。我附上我的代码和PHP脚本。我是一个初学者,所以任何帮助将不胜感激。

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 

    public void sendMessage(View view) { 

     HttpURLConnection request = null; 

     try { 
      String myURL = "http://creative.colorado.edu/"; 
      URL url = new URL(myURL); 

      request = (HttpURLConnection) url.openConnection(); 

      //To post output request 
      request.setDoOutput(true); 
      request.setRequestMethod("POST"); 
      request.setRequestProperty("message", "text/plain"); 

      String input = "I am ok"; 

      OutputStream outputPost = new BufferedOutputStream(request.getOutputStream()); 
      outputPost.write(input.getBytes()); 
      outputPost.flush(); 
      outputPost.close(); 

      BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream())); 
      String inputLine; 
      while((inputLine = in.readLine()) != null){ 
       System.out.println(inputLine); 
      } 

      in.close(); 

      System.out.println(inputLine); 

      TextView displayMessage = (TextView) findViewById(R.id.textView2); 
      displayMessage.setText(in.toString()); 
     } 

     catch (Exception ex) { 
     } 

     finally { 
      if (request != null) { 
       request.disconnect(); 
      } 
     } 

    } 
} 

这里是我使用的(我不能肯定它是正确的)的PHP脚本:

<?php 

//Read request parameters 
$message= $_POST[“message”]; 

// Store values in an array 
$returnValue = array(“message”=>$message); 

// Send back request in JSON format 
echo json_encode($returnValue); 

?> 
+0

对不起,php脚本似乎没有被粘贴。这里是: <?php //读取请求参数 $ message = $ _POST [“message”]; //将值存储在数组中 $ returnValue = array(“message”=> $ message); //以JSON格式发回请求 echo json_encode($ returnValue); ?> – user6951109

+0

你不调用方法'sendMessage'。您不能在与网络操作相同的线程中将文本设置为TextView。 –

+0

你实际上是在你的PHP代码中使用这些“聪明的引号”(斜角引号)吗?你应该使用直引号。 – Chris

回答

0

之前,你需要从你实际上使HTTP调用输入流中读取。

...

outputPost.close();

request.connect()

的BufferedReader在新=的BufferedReader(新的InputStreamReader(request.getInputStream())); ...

此外,任何网络调用都需要在后台异步线程中进行。 Volley(https://developer.android.com/training/volley/simple.html)库使这项工作变得非常简单。