2011-01-13 78 views
4

任何人都可以提供上述解决方案吗?Android JSON到PHP服务器和回

现在,我想要做的就是向我的服务器发送一个JSON请求(例如:{picture:jpg,color:green}),让PHP访问数据库,然后从服务器的数据库返回一个文件名(然后让android下载文件 - 不是问题)

任何人都可以首先建议一个Android框架,这将帮助我与此。 - POST JSON到我的服务器上的一个PHP文件

其次是一个PHP脚本,将JSON转换为PHP可读格式(访问数据库也不是问题,但我无法获得JSON到一个对象然后匹配数据库)

感谢

编辑

感谢之下,但我不要求这一点懒惰的链接,这是走出烦恼的我似乎没有能力送一个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 2011-01-13 21:39:23

+0

好的,修正了PHP方面的问题。出于某种原因,php.ini中的post_max_size = 10M会阻止少量的POST数据(不是GET)通过。 – Matt 2011-01-14 15:00:45

回答

14

好的,我有PHP。下面的检索过帐数据,并返回服务

<?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(); 
} 
2

在PHP所有你需要的是内置的json_decode,它将反序列化你的json并返回一个对象(或者如果你通过true作为第二个参数,则返回一个关联数组)。

在Android方面,您可能会使用HTTP Libraries来执行您的HTTP请求并处理响应。 (但有人谁实际上为Android开发可能纠正我)