我目前正在開發一個Android應用程序並遇到以下問題。 我正在向一個服務器發送一個HTTP請求,該服務器應該將我發回的XML內容發送給我,然後再解析。在解析長XML字符串時,我注意到了循環錯誤,因此我決定顯示我的請求的結果,並發現我收到的字符串(或流?)被隨機截斷。有時我會得到整個字符串,有時候是一半,有時候是三分之一,而且它似乎遵循了被截斷的字符數量的特定模式,我的意思是,我有時會在請求之後獲得320個字符,然後在156個字符之後獲得156個字符接下來是320兩次,然後是156(這些不是實際的數字,但它遵循一個模式)。Android HttpUrlConnection結果字符串截斷
這裏是我的請求和InputStream的轉換成字符串代碼:
private String downloadUrlGet(String myurl) throws IOException {
InputStream is = null;
// Only display the first 20000 characters of the retrieved
// web page content.
int len = 20000;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "application/xml");
// Starts the query
conn.connect();
int response = conn.getResponseCode();
Log.d(DEBUG_TAG, "The response is: " + response);
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString = readIt(is, len);
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
} finally {
if (is != null) {
is.close();
}
}
}
// Reads an InputStream and converts it to a String.
private String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
,我嘗試檢索XML的長度遠小於20000 我試圖使用HttpURLConnection類。 setChunkedStreamingMode()用0和各種其他數字作爲參數,但它沒有改變任何東西。
在此先感謝您的任何建議。
在你的「readIt」你的讀取輸入流中只有一次,從緩衝區中獲取一小塊數據。您需要重複閱讀才能結束。 –