2011-01-13 4 views
4

Может ли кто-нибудь предложить решение вышеизложенного?Android JSON для PHP Server и обратно

На данный момент все, что я хочу сделать, это отправить запрос JSON на мой сервер (например: {picture: jpg, color: green}), получить доступ к базе данных PHP, а затем вернуть имя файла из базы данных сервера (тогда получите android, чтобы загрузить файл - не проблема)

Может кто-нибудь предложить сначала Android Framework, который поможет мне в этом. - POST JSON в php-файл на моем сервере

И, во-вторых, скрипт php, который превратит JSON в читаемый в формате PHP (доступ к базе данных тоже не является проблемой, но я не могу получить JSON в объект, база данных)

благодаря

EDIT

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

Итак, позвольте мне показать код и выяснить, почему то, что я думаю, что должно произойти, не происходит:

GET URL (используя GET, так что я могу показать работу)

http://example.com/process/json.php?service=GOOGLE 

<?php 

// decode JSON string to PHP object 
$decoded = json_decode($_GET['json']); 

// I'm not sure of which of the below should work but i've tried both. 
$myService = $decoded->service; //$service should equal: GOOGLE 
$myService = $decoded->{'service'}; //$service should equal: GOOGLE 

// but the result is always $myService = null - why? 


?> 
+1

Http: //php.net/manual/en/book.json.php – thetaiko

+0

ОК, исправлена ​​сторона PHP. По какой-то причине наличие post_max_size = 10M в php.ini останавливало небольшое количество данных POST (не GET). – Matt

ответ

14

ОК, у меня есть PHP. Ниже извлекает POST эд данные и возвращает службу

<?php 

$data = file_get_contents('php://input'); 
$json = json_decode($data); 
$service = $json->{'service'}; 

print $service; 

?> 

и Android Код:

в OnCreate()

path = "http://example.com/process/json.php"; 

    HttpClient client = new DefaultHttpClient(); 
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout 
                      // Limit 
    HttpResponse response; 
    JSONObject json = new JSONObject(); 
    try { 
     HttpPost post = new HttpPost(path); 
     json.put("service", "GOOGLE"); 
     Log.i("jason Object", json.toString()); 
     post.setHeader("json", json.toString()); 
     StringEntity se = new StringEntity(json.toString()); 
     se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, 
       "application/json")); 
     post.setEntity(se); 
     response = client.execute(post); 
     /* Checking response */ 
     if (response != null) { 
      InputStream in = response.getEntity().getContent(); // Get the 
                   // data in 
                    // the 
                    // entity 
      String a = convertStreamToString(in); 
      Log.i("Read from Server", a); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

и где вы хотите

private static String convertStreamToString(InputStream is) { 

    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(); 
     } 
    } 
    return sb.toString(); 
} 
+0

Спасибо большое :) –

2

На PHP сторона, все, что вам нужно, это встроенный json_decode, который будет десериализовать ваш json и вернуть объект (или ассоциативный массив, если вы передадите true в качестве второго аргумента).

На стороне Android вы, вероятно, используете HTTP Libraries для выполнения вашего HTTP-запроса и обработки ответа. (Но кто-то, кто на самом деле был разработан для Android, может исправить меня)

Смежные вопросы