2016-11-30 1 views
0

Я пытаюсь получить доступ к серверу Apache с помощью кнопки.HTTP-запрос на разработку для Android - помощь в отладке

Я отправляю сообщение на сервер и получаю сообщение обратно. Я показываю это сообщение в текстовом поле.

Мой код не работает, и я не знаю, как отлаживать. Я добавляю свой код и 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, похоже, не был вставлен. Вот он: $ 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) делает эту работу значительно проще.