Я новичок в HTTP-клиенте PHP и Java, я пытаюсь отправить сообщение в свой PHP-скрипт на моем сервере, я пробовал следующий пример: http://webtutsdepot.com/2011/11/15/android-tutorial -how-to-post-data-from-an-android-app-to-a-website /

Однако я не могу понять, как отправить результат JSON обратно в мое приложение для Android, вот код, который я использую:

ДЖАВА:

      public void send(View v)
      {
     // get the message from the message text box
     String msg = Et.getText().toString();  

     // make sure the fields are not empty
     if (msg.length()>0)
     {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://animsinc.com/query.php");
     try {
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
       nameValuePairs.add(new BasicNameValuePair("id", "12345"));
       nameValuePairs.add(new BasicNameValuePair("message", msg));
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
       httpclient.execute(httppost);
       Et.setText(""); // clear text box
     } catch (ClientProtocolException e) {
         // TODO Auto-generated catch block
     } catch (IOException e) {
         // TODO Auto-generated catch block
     }

     }
     else
     {
        // display message if text fields are empty
         Toast.makeText(getBaseContext(),"All field are required",Toast.LENGTH_SHORT).show();
     }

 }

PHP:

       <?php

       require 'phtry.php';

       $message = $_POST["message"]; 

       $query = "SELECT `surname`,`firstname` FROM `users`";


       $query1 = "SELECT * FROM  `users` WHERE id = $message";

      if ($query_run = mysql_query($query1)){
 //echo 'Success.';
 while ($query_row = mysql_fetch_assoc($query_run)){

$surname = $query_row['surname'];
$firstname = $query_row['firstname'];



}


$out [] = $query_row;
print(json_encode($out)); // If I check with my web browser I get a [false] display here

}else{
    echo 'No Success';
}


    ?>

Поскольку я новичок в этом, я также хочу знать, правильно ли я все делаю.

2
Skynet 18 Мар 2013 в 15:23
Так что не работает? $ _POST ["message"] пусто?
 – 
RvdK
18 Мар 2013 в 15:25
Первое, что нужно сделать, это удалить echo $ surname; echo $ firstname; Это приведет к сбою json.
 – 
karmafunk
18 Мар 2013 в 15:26
Я мало знаю о java-коде на стороне клиента, но если вы хотите отправить информацию POST на PHP, а затем получить результат, это должен быть вызов AJAX, и если это то, что это такое, где функция обратного вызова? : S
 – 
Naryl
18 Мар 2013 в 15:28
Кроме того, если вы используете JOSN, вам необходимо использовать класс JSONObject в android. Посмотрите здесь: stackoverflow .com / questions / 3578441 /…
 – 
karmafunk
18 Мар 2013 в 15:29
1
Ваш код идеален, вам нужно добавить всего несколько строк в JAVA CODE, просто проверьте эту ссылку: stackoverflow.com/a/15090616/1168654
 – 
Dhaval Parmar
18 Мар 2013 в 15:32

1 ответ

Лучший ответ

Ваш код - беспорядок на стороне PHP. Вы не можете просто повторять вещи. Это приведет к сбою синтаксического анализа JSON.

Я рекомендую вам использовать облегченную библиотеку GSON от Google самостоятельно. Вы используете классы POJO для анализа json. Если у вас есть класс POJO с GSON, все, что вам нужно сделать, это использовать HttpResponse из вашего HttpPost, чтобы прочитать сам ответ, например:

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(URL);

        try {
            List<NameValuePair> values = new ArrayList<NameValuePair>(2);
            values.add(new BasicNameValuePair("id", "12345"));
            values.add(new BasicNameValuePair("message", "asdf");
            post.setEntity(new UrlEncodedFormEntity(values));

            HttpResponse httpresponse = client.execute(post);
            HttpEntity entity = httpresponse.getEntity();
            InputStream stream = entity.getContent();

            Gson gson = new Gson();
            Reader reader = new InputStreamReader(stream);

            Response finishresponse = gson.fromJson(reader, Response.class);
            return finishresponse;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

В моем случае мой класс POJO - это созданный мной класс Response.

1
tolgap 18 Мар 2013 в 16:23