2013-07-31 4 views
0

Cela a été demandé dans quelques questions mais je n'ai pas encore vu une vraie réponse. J'ai code Android qui exécute une NetHttpRequest à une image POST à ​​un serveur, mais il échoue souvent rapidement comme ceci:"fin inattendue de flux" levée pendant NetHttpRequest.execute() lors du téléchargement du fichier

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) 

Je ne comprends pas ... pourquoi échouer comme ça? Étant donné le backtrace, cela me fait croire que cela doit avoir quelque chose à voir avec la fermeture prématurée de la connexion par la bibliothèque HTTP, mais je ne peux pas déterminer pourquoi. La plupart des questions connexes ont exactement le même problème (par exemple Uploading jpeg to Google Drive from Android app "unexpected end of stream"), sauf dans tous les cas la question reste sans réponse ou le demandeur trouve une solution de contournement étrange qui semble la résoudre pour eux (bien qu'ils soient susceptibles d'avoir de la chance).

Mon code de téléchargement n'a rien de spécial non plus, juste un AsyncTask qui crée un HttpRequest et l'exécute. Il fonctionne parfaitement bien la plupart du temps, mais d'autres fois il échoue inexplicablement. Ce qui donne?

Répondre

1

OK, j'ai compris cela. Après plus de débogage, j'ai réussi à éliminer beaucoup de variables et je me suis convaincu que ce bogue devait exister dans la bibliothèque HTTP de base. Certains googling trouvé certaines personnes référençant les bogues dans l'implémentation d'HTTP de HTTP garder en vie (https://code.google.com/p/googleappengine/issues/detail?id=9291, Weird EOFException on Galaxy Nexus, etc.).

J'ajouté ce code à mon activité:

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

Et fixe mon problème. Solution de contournement ennuyeuse, mais cela fonctionne.

+0

toujours en erreur. – Napolean

Questions connexes