Java 从Android发送数据

Java 从Android发送数据,java,php,android,Java,Php,Android,我想将数据从Android设备发送到PHP。我试过了,但我不知道哪里错了。我如何纠正这个问题 这是我已经完成的Android代码 public class php_connect extends Activity { InputStream is; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

我想将数据从Android设备发送到PHP。我试过了,但我不知道哪里错了。我如何纠正这个问题

这是我已经完成的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;
?>

我总是得到空结果。

来自:

对于POST请求,它更倾向于$HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$HTTP_RAW_POST_数据的情况,它可能是一种比激活always_populate_RAW_POST_数据占用更少内存的替代方法。php://input 不适用于enctype=“多部分/表单数据”

我认为将JSON编码为表单参数并使用普通PHP$\u 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 />
得到了

注意:我没有测试上述代码。

什么是
var\u dump($data)
prints?这可能意味着您没有php手册中暗示的“特殊php.ini指令”(请参阅我的答案)。我不确定这些特别指示是什么。我建议尝试我建议的替代方法是的,我尝试了你的建议,但仍然不起作用..当然,你知道关于这方面的最佳教程..请提供链接…尝试我的建议后,你能显示更新的代码吗?List parameters=new ArrayList();add(新的BasicNameValuePair(“jsonParam”,json.toString());UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(参数);formEntity.setContentEncoding(“UTF-8”);setContentType(“多部分/表单数据”);httppost.setEntity(formEntity);HttpResponse response=httpclient.execute(httppost);当我尝试这个…错误是:未定义索引