Intereting Posts
Не удалось найти перенос сокетов «ssl» в рамках Zend 1.12 Как включить файл php.ini для всех каталогов / подкаталогов моего сервера? как получить серийный номер жесткого диска с php на localhost Можно ли включить код сборки в php-скрипт? Напишите PHP-код в PHP PHP Отображение загруженного изображения на другую страницу Команда crontab не найдена в моем git-bash для Windows 7 Получение последнего идентификатора вставки из MySql с помощью PHP Вход в систему Системный дизайн, позволяющий каждому пользователю регистрироваться на одной машине за раз Регулярное выражение для текста с разделителями-запятыми aws: ses с прикрепленными файлами Yii2, Kartik DepDrop на предварительно выбранном значении обновления Что должен представлять пакет в Symfony2? Как перехватывать БД-запросы? (Баз данных) Сохранение и отображение изображения с использованием холста в базе данных

Отправка данных с Android на сервер с данными JSON

Я пытаюсь отправить данные из приложения Android на веб-сервер. Мое приложение для Android работает успешно. Однако PHP-код имеет проблемы.

<?php $json = $_SERVER['HTTP_JSON']; echo "JSON: \n"; var_dump($json); echo "\n\n"; $data = json_decode($json,true); echo "Array: \n"; var_dump($data); echo "\n\n"; $name = $data['name']; $pos = $data['position']; echo "Result: \n"; echo "Name : ".$name."\n Position : ".$pos; ?> 

Ошибки:

 Notice: Undefined index: HTTP_JSON in C:\wamp\www\jsonTest.php on line 2 ( line 2 : $json = $_SERVER['HTTP_JSON']; ) 

Я не мог найти причину этих проблем. Вы можете мне помочь ? (примечание: я использую wamp-сервер)

Вот соответствующий Android-источник:

 // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("10.0.2.2:90/jsonTest.php";); JSONObject json = new JSONObject(); try { json.put("name", "flower"); json.put("position", "student"); JSONArray postjson=new JSONArray(); postjson.put(json); httppost.setHeader("json",json.toString()); httppost.getParams().setParameter("jsonpost",postjson); System.out.print(json); HttpResponse response = httpclient.execute(httppost); if(response != null) { InputStream is = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } text = sb.toString(); } tv.setText(text); }catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } 

Этот код успешно работает на стороне android (без ошибок). Но у php есть проблемы. Спасибо.

Здесь нет вашего JSON:

 $json = $_SERVER['HTTP_JSON']; 

Возможно, вы имели в виду:

 $json = $_POST['HTTP_JSON']; 

Где HTTP_JSON – это имя переменной POST, которое вы передали вашему JSON в своем приложении для Android.

Остальные ошибки связаны с тем, что json_decode терпит неудачу, потому что вы не json_decode прочитать данные JSON из запроса. Вы можете проверить ответ json_decode чтобы убедиться, что он был успешным следующим образом:

 $data = json_decode($json,true); if( $data === NULL) { exit( 'Could not decode JSON'); } 

Наконец, передавая true поскольку второй параметр json_encode означает, что он вернет ассоциативный массив, вы получите доступ к таким элементам:

 $name = $data['name']; $pos = $data['position']; 

Убедитесь, что вы прочитали документы для json_encode, чтобы понять, что он делает.

Изменить: проблема заключается в том, что вы обращаетесь к параметру $_POST по неправильному имени. Вы должны использовать:

 $json = $_POST['jsonpost']; 

Поскольку следующие строки обозначают параметр «jsonpost»:

 httppost.getParams().setParameter("jsonpost",postjson); 

Поскольку я не знаю, как клиент java отправляет запрос, я бы попытался:

 print_r($_SERVER); print_r($_GET); print_r($_POST); 

Чтобы понять, как это происходит.

попробуйте следующие строки:

 httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-type", "application/json");