2011-11-29 3 views
7

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

<?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 
} 

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

ответ

6

Это не там, где ваш JSON является:

$json = $_SERVER['HTTP_JSON']; 

Вы, возможно, означало:

$json = $_POST['HTTP_JSON']; 

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

Остальные ошибки проистекают из-за того, что 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']; 

Убедитесь, что вы read the docs для json_encode так что вы понимаете, что это делает.

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

$json = $_POST['jsonpost']; 

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

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

Спасибо за ответ. Я использовал $ _POST вместо $ _SERVER, но ту же ошибку: Примечание: Неопределенный индекс: HTTP_JSON в C: \ wamp \ www \ jsonTest.php в строке 3. – iremce

+0

Ваш PHP-скрипт не собирает данные JSON ... Сообщение соответствующие разделы кода Android, где вы отправляете JSON на сервер. – nickb

+0

Одна часть кода: // Создаем новый HttpClient и Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost ("http: // localhost: 90/jsonTest.php"); JSONObject json = new JSONObject(); try { json.put ("name", "Irem"); 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); – iremce

2

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

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

Чтобы понять, как это делается.

1

попробовать эти строки:

httppost.setHeader("Accept", "application/json"); 
    httppost.setHeader("Content-type", "application/json"); 
Смежные вопросы