我正在開發這個基本上將圖像上傳到web服務的android應用程序。 我有一個的AsyncTask,我將文件發送到服務器,使用此代碼:當數據連接丟失時,輸出流沒有IOException異常
protected Boolean doInBackground(byte[]... params) {
HttpURLConnection connection = getConnection();
BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());
Log.d("OutputStream", "stream created, about to write");
out.write(params[0]);
Log.d("OutputStream", "all bytes written");
out.close();
}
當然,這個代碼塊是一個嘗試捕捉內包裝,醒目的IOExceptions等 的問題是,當我在之後中斷連接我看到第一個邏輯記錄,從來沒有拋出異常,或者只有在很長一段時間(說了大約20分鐘左右)之後才發生,這根本沒有任何意義。
的HttpURLConnection的設置是這樣的:
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", this.contentType);
urlConnection.setRequestProperty("User-Agent", String.format("custom-user-agent/%d", R.integer.version_code));
urlConnection.addRequestProperty("SessionID", this.sessionID);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(30000);
urlConnection.setReadTimeout(30000);
urlConnection.setChunkedStreamingMode(0);
urlConnection.setUseCaches(false);
urlConnection.connect();
有趣的是,中斷EDGE/3G連接時,這只是發生。當我中斷無線連接時,立即拋出異常(當然,這更方便)。
對此有何想法?
內容類型設置爲「application/octet-stream」。但是,當連接中斷時,標題實際上很重要嗎?我會刪除.connect(),謝謝。 – RienK
好的,我還沒有意識到你已經設置了內容類型。無論如何,我不認爲標題在這個問題上很重要,就像你說的。它現在有用嗎? – Santiago
不,沒有什麼區別,謝謝! – RienK