Я пытаюсь отправить данные из приложения 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");