2016-05-19 7 views
0

Hier Ende Aufruf ist mein Stacktrace:Android Illegal: Versuch Inflater zu verwenden, nachdem

<StackTrace>java.lang.IllegalStateException: attempt to use Inflater after calling end 
    at java.util.zip.Inflater.checkOpen(Inflater.java:332) 
    at java.util.zip.Inflater.setInput(Inflater.java:312) 
    at com.android.okhttp.okio.InflaterSource.refill(InflaterSource.java:106) 
    at com.android.okhttp.okio.InflaterSource.read(InflaterSource.java:62) 
    at com.android.okhttp.okio.GzipSource.read(GzipSource.java:80) 
    at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:374) 
    at java.io.InputStream.read(InputStream.java:162) 
    at com.myProgram.services.DownloadService.onHandleIntent(DownloadService.java:58) 
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 
</StackTrace> 

und hier ist der Code von Downloadservice:

InputStream input = connection.getInputStream(); 
byte data[] = new byte[1024]; 
     long total = 0; 
     int count; 
     while ((count = input.read(data)) != -1) { 
      total += count; 
      Bundle resultData = new Bundle(); 
      resultData.putInt("progress" ,(int) (total * 100/fileLength)); 
      receiver.send(U_PROGRESS, resultData); 
      output.write(data, 0, count); 
     } 

58 Linie ist:

while ((count = input.read(data)) != -1) { 

Dieser Fehler tritt in zufälligen Fällen auf. Download-Dienst wird verwendet, um eine neue Version der App herunterzuladen.

Antwort

0

Beachten Sie, dass Sie den Download-InputStream nicht von einem anderen Thread als dem Download-Dienst (d. H. Demjenigen, der InputStream.read aufruft) schließen können.

Haben Sie einen anderen Thread, der zufällig versucht, den Stream mit InputStream.close() api zu schließen? Ein solches Verhalten führt zu dieser Art von Laufzeitausnahme. Bei neueren Versionen von OkHttp wird eine ähnliche Ausnahme vom abschließenden Thread erzeugt. Siehe unten für eine Referenz: https://github.com/square/okhttp/issues/1842

Verwandte Themen