2013-07-25 109 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())。