2013-07-25 107 views
0

我试图做一个REST服务POST方法,但我没有收到来自服务器的响应:POST,函数返回空响应

public JSONObject postValues (String strUrl, String strJsonArray) throws Exception{ 
    JSONObject jsonObject = null; 
    URL url = new URL(strUrl); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setReadTimeout(10000); 
    conn.setConnectTimeout(15000); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

    strJsonArray = "data=" + strJsonArray; 

    Log.e("result",""+strJsonArray); 

    OutputStream os = conn.getOutputStream(); 
    os.write(strJsonArray.getBytes()); 
    os.flush(); 

    conn.connect(); 

    if (conn.getResponseCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
       + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

    String output; 
    StringBuilder sb = new StringBuilder(); 

    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     Log.e("output",output); 
     sb.append(output); 

    } 

    Log.e("output",sb.toString()); 
    jsonObject = new JSONObject(sb.toString()); 

    conn.disconnect(); 

    return jsonObject; 

} 

当我看到我的logcat的一个get :

output {} 

我知道服务器工作的权利,因为我使用谷歌浏览器的“先进REST客户端”插件。如果我手动调用URL(当然使用的插件)我得到想要的答案:

{"message":"OK","code":200} 

但是,如果我尝试使用我的功能,我的strJsonArray插入,但我从服务器获取一个空的响应。

我的代码有什么问题吗?

+1

一切看起来不错...您可以使用Wireshark捕获使用模拟器和Chrome休息客户端发送到服务器和从服务器接收的数据包。然后你可以比较它们,也许可以找出问题所在。你也可以检查错误流('conn.getErrorStream()')中是否有东西。 –

+0

感谢您的回复,您是对的。代码没有问题。问题出在服务器上。感谢您的帮助:) – kiduxa

+0

好吧:)我只是发表评论作为答案,以便您可以接受;) –

回答

1

一切看起来都不错...

你可以使用Wireshark来捕获发送并使用仿真器和Chrome其余客户端从服务器接收到的数据包。然后你可以比较它们,也许可以找出问题所在。

你也可以检查错误流中是否有东西(conn.getErrorStream())。