2011-06-02 45 views
0

我想將數據從Android設備發送到PHP。我試過了,但是我錯了,我不知道。我該如何糾正?從Android發送數據

這是我所做的Android代碼。

public class php_connect extends Activity { 
    InputStream is; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main1); 
     JSONObject json = new JSONObject(); 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://10.0.2.2/food/food.php"); 
      json.put("id",1); 
      json.put("name","john"); 
      Log.i("jason Object", json.toString()); 
      httppost.setHeader("json", json.toString()); 

      StringEntity se = new StringEntity(json.toString()); 
      se.setContentEncoding("UTF-8"); 
      se.setContentType("application/json"); 
      httppost.setEntity(se); 
      HttpResponse response = httpclient.execute(httppost); 
      int statusCode = response.getStatusLine().getStatusCode(); 
      Toast.makeText(getApplicationContext(),String.valueOf(statusCode), Toast.LENGTH_SHORT).show(); 
      is = se.getContent(); 
      Log.e("log_tag", "connection success "); 
      Toast.makeText(getApplicationContext(), "Successfully Connected", Toast.LENGTH_SHORT).show(); 
     } 
     catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
      Toast.makeText(getApplicationContext(), "Fail to Connect", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

我得到響應爲200併成功連接,但無法在PHP中看到數據。

我的PHP代碼:

<?php 
    $data = file_get_contents('php://input'); 
    $json = json_decode($data,true); 
    var_dump($json); 
    $id=$json['id']; 
    echo $id; 
?> 

我總是空的結果。

+0

var_dump($ data)'打印什麼? – 2011-06-02 07:38:26

+0

它給出了NULL結果 – ramesh 2011-06-02 08:12:44

+0

這可能意味着你沒有像PHP手冊中暗示的'特殊的php.ini指令'(請參閱我的答案)。我不確定這些特殊指令是什麼。我建議嘗試我建議的替代方法 – 2011-06-02 08:17:57

回答

1

PHP manual

在POST請求的情況下,preferrable至$ HTTP_RAW_POST_DATA,因爲它不依賴於特殊的php.ini設置。而且,對於默認情況下未填充$ HTTP_RAW_POST_DATA的情況,這對於激活always_populate_raw_post_data是一種潛在的更少內存密集的選擇。 php://輸入不可用與enctype =「multipart/form-data」

我認爲將您的JSON作爲表單參數進行編碼並使用普通的PHP $ _POST函數來讀取它會更容易:

List parameters = new ArrayList(); 
parameters.add(new BasicNameValuePair("jsonParam", json.toString()) 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters) 
httppost.setContentType("multipart/form-data"); 
httppost.setEntity(formEntity); 

在PHP端,你可以簡單地做

Got <?php echo $_POST["jsonParam"]; ?>!<br /> 

注:我沒有測試上面的代碼。

+0

感謝塔希爾的建議,但仍然不工作 – ramesh 2011-06-02 08:31:26

+0

<?php echo $ _POST [「jsonParam」]; ?>當我嘗試這個...錯誤是:UNDEFINED索引 – ramesh 2011-06-02 09:54:18

+0

你能顯示整個php代碼嗎? – 2011-06-02 10:00:35