可以java.util.zip.GZIPInputStream.close引起android.os.NetworkOnMainThreadException [英] Can java.util.zip.GZIPInputStream.close cause android.os.NetworkOnMainThreadException

查看:349
本文介绍了可以java.util.zip.GZIPInputStream.close引起android.os.NetworkOnMainThreadException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

应用程序适用于2.2.1和2.2罚款,但导致在4.0.3以下错误

The App works fine on the 2.2.1 and 2.2 but is causing the following error on 4.0.3

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1178)
at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:134)
at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:161)
at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:175)
at org.apache.http.impl.io.ChunkedInputStream.exhaustInputStream(ChunkedInputStream.java:289)
at org.apache.http.impl.io.ChunkedInputStream.close(ChunkedInputStream.java:262)
at org.apache.http.conn.BasicManagedEntity.streamClosed(BasicManagedEntity.java:179)
at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:266)
at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:213)
at java.io.FilterInputStream.close(FilterInputStream.java:64)
at java.util.zip.InflaterInputStream.close(InflaterInputStream.java:256)
at java.util.zip.GZIPInputStream.close(GZIPInputStream.java:148)
at com.myapp.apper.contact.ContactService.a(SourceFile:390)
at com.myapp.apper.contact.ContactService.a(SourceFile:347)
at com.myapp.apper.contact.ContactService.a(SourceFile:41)
at com.myapp.apper.contact.g.a(SourceFile:322)
at com.myapp.apper.contact.q.a(SourceFile:58)
at com.myapp.apper.contact.q.onPostExecute(SourceFile:23)
at android.os.AsyncTask.finish(AsyncTask.java:602)
at android.os.AsyncTask.access$600(AsyncTask.java:156)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:4974)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

我所有的网络操作都在的AsyncTask,并从堆栈跟踪看起来像错误是由 java.util.zip.GZIPInputStream.close 引起的,它也指出对像

All my network operations are in AsyncTask and from the stacktrace looks like the errors is caused by java.util.zip.GZIPInputStream.close and it also points towards the like 390 of the code which is gzipIn.close();.

时GZIPInputStream causint这个错误?如果不是,这可能是错误的原因是什么?

Is GZIPInputStream causint this error? If not, what could be the cause of the error?

推荐答案

看起来你是在使用GZIPInputStream读点的 onPostExecute()运行在异步任务UI线程。从4.0起它不允许在UI线程的网络连接。我建议移动在 doInBackground()方法GZIPInputStream阅读的部分。

It looks like you are reading something using GZIPInputStream in the onPostExecute() of async task which runs in UI thread. From 4.0 onward it is not allowed to have network connection in UI thread. I would suggest to move the GZIPInputStream reading part in the doInBackground() method.

EDIT1:或者您可以通过以下code禁用严格模式:

or you can disable the strict mode by following code:

if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = 
        new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}

这篇关于可以java.util.zip.GZIPInputStream.close引起android.os.NetworkOnMainThreadException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆