2013-03-28 52 views
1

我正在開發這個基本上將圖像上傳到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連接時,這只是發生。當我中斷無線連接時,立即拋出異常(當然,這更方便)。

對此有何想法?

回答

1

前一段時間,我們已經遇到了這個問題,不過只有在三星Galaxy SII採用Android 2.3.4。所有其他設備都沒有這個問題。沒有辦法來解決這個問題。

0

您不需要使用urlConnection.connect():當您執行.getOutputStream()時,連接處於打開狀態。 另外,如果您創建.connect(),則無法在.getOutputStream()之前創建它。 此外,還必須設置Content-Type頭:

urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
+0

內容類型設置爲「application/octet-stream」。但是,當連接中斷時,標題實際上很重要嗎?我會刪除.connect(),謝謝。 – RienK

+0

好的,我還沒有意識到你已經設置了內容類型。無論如何,我不認爲標題在這個問題上很重要,就像你說的。它現在有用嗎? – Santiago

+0

不,沒有什麼區別,謝謝! – RienK

相關問題