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插入,但我從服務器獲取一個空的響應。
我的代碼有什麼問題嗎?
一切看起來不錯...您可以使用Wireshark捕獲使用模擬器和Chrome休息客戶端發送到服務器和從服務器接收的數據包。然後你可以比較它們,也許可以找出問題所在。你也可以檢查錯誤流('conn.getErrorStream()')中是否有東西。 –
感謝您的回覆,您是對的。代碼沒有問題。問題出在服務器上。感謝您的幫助:) – kiduxa
好吧:)我只是發表評論作爲答案,以便您可以接受;) –