我正在嘗試使用HttpUrlConnection從Android應用程序向WebService發出請求。但有時它有效,有時卻不行。DataOutputSteam拋出一個'java.io.IOException:意外的流結束'?
當我嘗試發送此值:
JSON值
{"Calle":"Calle Pérez 105","DetalleDireccion":"","HoraPartida":"May 18, 2014 9:17:10 AM","Numero":0,"PuntoPartidaLat":18.477295994621315,"PuntoPartidaLon":-69.93638522922993,"Sector":"Main Sector"}
我得到了一個「流意外結束」中的異常DataOutputStream類關閉功能。
這裏是我的代碼:
DataOutputStream printout;
// String json;
byte[] bytes;
DataInputStream input;
URL serverUrl = null;
try {
serverUrl = new URL(Config.APP_SERVER_URL + URL);
} catch (MalformedURLException e) {
...
}
bytes = json.getBytes();
try {
httpCon = (HttpURLConnection) serverUrl.openConnection();
httpCon.setDoOutput(true);
httpCon.setUseCaches(false);
httpCon.setFixedLengthStreamingMode(bytes.length);
httpCon.setRequestProperty("Authorization", tokenType + " "+ accessToken);
httpCon.setRequestMethod("POST");
httpCon.setRequestProperty("Content-Type", "application/json");
printout = new DataOutputStream(httpCon.getOutputStream());
printout.writeBytes(json);
printout.flush();
printout.close();
...
}
它可能不涉及到你的問題:你不想使用* DataOutputStream類*實例。這是一種二進制,而非專有格式。正確的方法是使用UTF-8編碼將JSON字符串轉換爲字節數組,然後將其直接寫入連接的輸出流。 – Codo
您代碼中的另一個問題是您使用默認編碼將JSON字符串轉換爲字節數組。然後使用數組的長度來設置內容長度。但是,應用* DataOutputStream *的方式是以ASCII模式寫入字符串(writeBytes不使用編碼;它丟棄高位)。所以你可能在宣佈的和有效的內容長度之間不匹配。 – Codo