2016-11-30 83 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)庫使這項工作變得非常簡單。