使用Android将JSON发送到PHP

3
我是一个有用的助手,可以为您进行翻译。
我正在尝试将JSON发送到PHP并存储所发送的数据,但我无法使其正常工作。
我的Android代码:
  public void sendToServer(String txt) throws JSONException{

            String path = "http://10.0.0.6:8888/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("text", txt);
                Log.i("jason Object", json.toString()); //This print the data perfectly 
                post.setHeader("json", json.toString());
                post.setHeader("Accept", "application/json");

                Log.i("Done", "DONE 1");

                StringEntity se = new StringEntity(json.toString());

                se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                        "application/json"));
                Log.i("Done", "DONE 2");

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("myjson", json.toString()));
                post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 


                Log.i("Done", "DONE 3");

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

和我的php代码

<?php  

$decoded = json_decode(stripslashes($_POST['myjson']));
if($decoded)
$con = mysql_connect('localhost','root','root') 
       or die('Cannot connect to the DB');
mysql_select_db('deaf',$con);
mysql_query("INSERT INTO text
VALUES ('".$decoded->{'text'}"')");
mysql_close($con);
$posts = array(1);
 header('Content-type: application/json');
 echo json_encode(array('posts'=>$posts)); 

else
echo "error";
  ?>

插入语句无法正常工作,我已经花了数小时尝试修复,但都没有成功。请帮助我,谢谢。


你在Java的in变量中得到了什么?用if {} else {}替换你的模板化if。它只适用于1行代码,而你在那个if中有10行。这是行不通的。 - Hamza Waqas
抱歉,这些是从服务器读取的内容,而不是发送到服务器的。我在发送方面遇到了问题,谢谢。 - Osaed
1个回答

0

这个有一些问题。

1. 你似乎只是将json塞入代码的任意部分(如json头,未使用的StringEntity,myjson url编码的表单字段)。我建议将请求体直接设为JSON文档。然而,还有其他方法,让我们尝试让myjson工作起来。如果可以,我会将名称更改为像document这样的名称。它不需要出现在标题中,您可以删除StringEntity。 2. stripslashes 的正确用法非常少。您不应该对表单输入运行它。如果确实需要,请检查magic_quotes是否启用。 magic_quotes已从PHP(5.4及更高版本)中删除,不应再使用。 3. 我建议你使用预处理语句。如果不使用,你应该使用mysql_real_escape_string。否则,你将容易受到SQL注入的攻击。 4. 您可以简化对象访问。所以代码应该是:mysql_query("INSERT INTO text VALUES ('" . mysql_real_scape_string($decoded->text) . "')");
如果插入语句失败,请发布错误信息,包括 mysql_error。该错误信息将有助于解决问题。

谢谢回复,只是一个问题,如果我使用myjson或document,那么JSON对象会是什么样子? - Osaed
我是说在客户端和服务器上将myjson替换为document - Matthew Flaschen
我知道,但JSON会是什么样子呢? {"text": "sometext"} 这个对象中的文档在哪里?或者这只是用来处理的? 抱歉,我真的很新手 :) - Osaed
你正在使用UrlEncodedFormEntity,所以它将会像 document={"text": "sometext"} 一样,除了等号后面的部分被编码成url。 - Matthew Flaschen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接