2013-07-31 20 views
0

這已在幾個問題中提出,但我還沒有看到真正的答案。我有Android的代碼執行NetHttpRequest到圖像發佈到服務器,但它往往不能很快就像這樣:上傳文件時在NetHttpRequest.execute()中拋出的「流的意外結束」

unexpected end of stream java.io.IOException: unexpected end of stream 
    at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58) 
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:84) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1009) 
    at com.test.MyActivity$ImageUploadTask.doInBackground(MyActivity.java:870) 
    at com.test.MyActivity$ImageUploadTask.doInBackground(MyActivity.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    at java.lang.Thread.run(Thread.java:856) 

我不明白這一點。爲什麼不能這樣呢?鑑於回溯,它使我相信它必須與HTTP庫過早關閉連接有關,但我無法確定原因。大多數相關問題都有完全相同的問題(例如Uploading jpeg to Google Drive from Android app "unexpected end of stream"),除非每個問題都沒有答案,或者提問者發現一些似乎爲他們解決問題的奇怪解決方法(儘管他們很可能只是幸運了)。

我的上傳代碼不是什麼特別的,只是一個創建HttpRequest並執行它的AsyncTask。它大部分時間都完美無瑕,但其他時候卻不能解釋。是什麼賦予了?

回答

1

好的,我明白了這一點。

經過更多的調試後,我能夠消除很多變量,並確信自己這個bug必須存在於核心HTTP庫中。一些谷歌搜索發現一些人引用了Android的HTTP保持執行中的錯誤(https://code.google.com/p/googleappengine/issues/detail?id=9291,Weird EOFException on Galaxy Nexus等)。

所以我加入這個代碼到我的活動:

System.setProperty("http.keepAlive", "false"); 

這固定我的問題。惱人的解決方法,但它的工作原理。

+0

仍然得到錯誤。 – Napolean