2011-06-01 64 views
3

我想发送一个简单的JSON对象到PHP服务器,但是当我尝试在服务器端检索该对象时,没有什么我的意思是我的$ _POST变量是空的。服务器端是PHP 5.2,我使用的是Android模拟器10 ...有人可以看看我的代码并告诉我发生了什么问题吗? 非常感谢如何将Android应用程序的JSONObject传递给PHP文件?

public void uploadJSon() throws ClientProtocolException, IOException, JSONException{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     String url = "http://so-dev-deb.niv2.com/suivi_activite/test.php"; 
     HttpPost httppost = new HttpPost(url); 
     JSONObject json = new JSONObject(); 

     json.put("username", "bob"); 
     json.put("email", "[email protected]"); 
     List nvps = new ArrayList(); 

     nvps.add(new BasicNameValuePair("value", json.toString())); 
     httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));     

     URL test_url = new URL(url); 
     URLConnection connection = test_url.openConnection(); 
     connection.setDoOutput(true); 

     HttpResponse response; 
     response = httpclient.execute(httppost); 
     Log.i("NVPS",nvps.get(0).toString()); 
     Log.i("JSON",json.toString()); 
     Log.i("response", response.getEntity().getContent().toString()); 
     Log.i("response status",response.getStatusLine().toString()); 

     BufferedReader in = new BufferedReader(
      new InputStreamReader(
      connection.getInputStream())); 

     String decodedString; 

     while ((decodedString = in.readLine()) != null) { 
      //System.out.println(decodedString); 
      Log.i("info 10",decodedString); 
     } 
     in.close(); 

    } 

服务器端test.php的是:

<?php 
    $tmp = json_decode($_POST['value']); 
    var_dump($tmp); 
?> 
+0

我不知道为什么它没有正确显示在我的代码中,但必须添加此行List nvps = new ArrayList ();而不是实际显示的内容.... Thx – user683831 2011-06-01 15:39:34

回答

4

我通常采取这种做法在Java代码生成一个JSON对象:

StringWriter writer = new StringWriter(); 
JSONWriter jsonWriter = new JSONWriter(writer); 
jsonWriter.object(); 
jsonWriter.key("key1").value("test1"); 
jsonWriter.key("key2").value("test2"); 
jsonWriter.endObject(); 
String toSend = writer.toString(); 
+0

Thx,我在你的代码中使用了你的代码片断来生成JSON对象,但是我的服务器端没有任何东西....任何想法? – user683831 2011-06-01 15:41:08

0

我没有PHP的专家,但是,我工作的一个项目解码了我提交的json。

$jsonData = file_get_contents("php://input"); 

如果(isset($ jsonData)& &空($ jsonData)!){$ 这 - >数据= json_decode($ jsonData,TRUE); }

+0

我刚刚试过这个,但没有在jsonData中... – user683831 2011-06-02 10:28:31

+0

我只能建议你检查你的客户端上的json代码。这是我使用的一个样本。它不会让我添加任何代码,所以我会添加另一个答案 – Bear 2011-06-02 12:01:26

0
public static String login(Context context, String email, String pwd) { 

    HttpClient client = new DefaultHttpClient(); 


    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout 
    // Limit 
    HttpResponse response; 
    JSONObject json = new JSONObject(); 
    try { 

     Log.d("Debug","Login Url:" + context.getResources().getString(
       R.string.url) + context.getResources().getString(
         R.string.login)); 

     HttpPost post = new HttpPost(context.getResources().getString(
       R.string.url) + context.getResources().getString(
         R.string.login)); 

     post.setHeader("Accept", "application/json"); 
     post.setHeader("Content-type", "application/json"); 

     json.put("email", email); 
     json.put("password", pwd); 

     StringEntity se = new StringEntity("{\"User\":" + json.toString() 
       + "}"); 
     post.setEntity(se); 
     response = client.execute(post); 

     if (response != null) { 
      json = getResult(response); 

      if(statusOK(json)){ 
       return new String(json.getString("token")); 
      } 
     } 
    } catch (Exception e) { 
     Log.e("Error", "Error Login", e); 
    } 
    // printJSON(json); 

    return "ERROR"; 
} 

注意我把JSON包装在用户中,因为服务器需要这个用于我的情况。

相关问题