带有okhttp的Android rxjava-NetworkOnMainThreadException [英] Android rxjava with okhttp - NetworkOnMainThreadException

查看:167
本文介绍了带有okhttp的Android rxjava-NetworkOnMainThreadException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有时会遇到异常-android.os.NetworkOnMainThreadException,有时代码会起作用.

这是我的代码

Observable.create(new Observable.OnSubscribe<Response>() {
        OkHttpClient client = new OkHttpClient();

        @Override
        public void call(Subscriber<? super Response> subscriber) {
            try {
                Response response = client.newCall(request).execute();

                subscriber.onNext(response);
                subscriber.onCompleted();
            } catch (IOException e) {
                subscriber.onError(e);
            }

        }
    }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .unsubscribeOn(Schedulers.io())
            .map(new Func1<Response, Res>() {
                @Override

                public Res call(Response response) {

                    String post = new Scanner(response.body().byteStream(), "UTF-8")
                            .useDelimiter("\\A").next();
                    Log.d(TAG,post);
                    return model.deCryptData(post);
                }
            })

            .subscribe(new Action1<Res>() {
                @Override
                public void call(Res res) { ...

有时结果是:

04-19 11:34:21.890 9763-9763/? W/System.err:android.os.NetworkOnMainThreadException 04-19 11:34:21.890 9763-9763/? W/System.err:位于android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 04-19 11:34:21.890 9763-9763/? W/System.err:位于libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249) 04-19 11:34:21.890 9763-9763/? W/System.err:位于libcore.io.IoBridge.recvfrom(IoBridge.java:549) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.net.PlainSocketImpl.read(PlainSocketImpl.java:481) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:37) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:237) 04-19 11:34:21.890 9763-9763/? W/System.err:在okio.Okio $ 2.read(Okio.java:138) 04-19 11:34:21.890 9763-9763/? W/System.err:在okio.AsyncTimeout $ 2.read(AsyncTimeout.java:238) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okio.RealBufferedSource.read(RealBufferedSource.java:45) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okhttp3.internal.http.Http1xStream $ FixedLengthSource.read(Http1xStream.java:377) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okio.RealBufferedSource.read(RealBufferedSource.java:45) 04-19 11:34:21.890 9763-9763/? W/System.err:在okio.RealBufferedSource.exhausted(RealBufferedSource.java:55) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okio.InflaterSource.refill(InflaterSource.java:101) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okio.InflaterSource.read(InflaterSource.java:62) 04-19 11:34:21.890 9763-9763/? W/System.err:位于okio.GzipSource.read(GzipSource.java:80) 04-19 11:34:21.890 9763-9763/? W/System.err:在okio.RealBufferedSource $ 1.read(RealBufferedSource.java:409) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.io.InputStreamReader.read(InputStreamReader.java:233) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.io.Reader.read(Reader.java:141) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.io.Reader.read(Reader.java:245) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.util.Scanner.readMore(Scanner.java:2068) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.util.Scanner.findDelimiterAfter(Scanner.java:2038) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.util.Scanner.setTokenRegion(Scanner.java:1953) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.util.Scanner.next(Scanner.java:965) 04-19 11:34:21.890 9763-9763/? W/System.err:位于java.util.Scanner.next(Scanner.java:941) 04-19 11:34:21.890 9763-9763/? W/System.err:at uz.newsign.mvp.ImplPresenter $ 3.call(ImplPresenter.java:121) 04-19 11:34:21.891 9763-9763/? W/System.err:at uz.newsign.mvp.ImplPresenter $ 3.call(ImplPresenter.java:115) 04-19 11:34:21.891 9763-9763/? W/System.err:在rx.internal.operators.OperatorMap $ MapSubscriber.onNext(OperatorMap.java:66) 04-19 11:34:21.891 9763-9763/? W/System.err:在rx.internal.operators.OperatorUnsubscribeOn $ 1.onNext(OperatorUnsubscribeOn.java:53) 04-19 11:34:21.891 9763-9763/? W/System.err:在rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber.call(OperatorObserveOn.java:227) 04-19 11:34:21.891 9763-9763/? W/System.err:位于rx.android.schedulers.LooperScheduler $ ScheduledAction.run(LooperScheduler.java:107) 04-19 11:34:21.891 9763-9763/? W/System.err:位于android.os.Handler.handleCallback(Handler.java:739) 04-19 11:34:21.891 9763-9763/? W/System.err:位于android.os.Handler.dispatchMessage(Handler.java:95) 04-19 11:34:21.891 9763-9763/? W/System.err:位于android.os.Looper.loop(Looper.java:148) 04-19 11:34:21.891 9763-9763/? W/System.err:位于android.app.ActivityThread.main(ActivityThread.java:5441) 04-19 11:34:21.891 9763-9763/? W/System.err:位于java.lang.reflect.Method.invoke(本机方法) 04-19 11:34:21.891 9763-9763/? W/System.err:位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:738) 04-19 11:34:21.891 9763-9763/? W/System.err:位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 04-19 11:34:21.891 9763-9763/? W/System.err:原因:rx.exceptions.OnErrorThrowable $ OnNextValue:发出onNext值时出现OnError:okhttp3.Response.class 04-19 11:34:21.891 9763-9763/? W/System.err:在rx.internal.operators.OperatorMap $ MapSubscriber.onNext(OperatorMap.java:70) 04-19 11:34:21.891 9763-9763/? W/System.err:还有10个

04-19 11:34:21.890 9763-9763/? W/System.err: android.os.NetworkOnMainThreadException 04-19 11:34:21.890 9763-9763/? W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 04-19 11:34:21.890 9763-9763/? W/System.err: at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249) 04-19 11:34:21.890 9763-9763/? W/System.err: at libcore.io.IoBridge.recvfrom(IoBridge.java:549) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:481) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.Okio$2.read(Okio.java:138) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:238) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.RealBufferedSource.read(RealBufferedSource.java:45) 04-19 11:34:21.890 9763-9763/? W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:377) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.RealBufferedSource.read(RealBufferedSource.java:45) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.RealBufferedSource.exhausted(RealBufferedSource.java:55) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.InflaterSource.refill(InflaterSource.java:101) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.InflaterSource.read(InflaterSource.java:62) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.GzipSource.read(GzipSource.java:80) 04-19 11:34:21.890 9763-9763/? W/System.err: at okio.RealBufferedSource$1.read(RealBufferedSource.java:409) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.io.InputStreamReader.read(InputStreamReader.java:233) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.io.Reader.read(Reader.java:141) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.io.Reader.read(Reader.java:245) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.util.Scanner.readMore(Scanner.java:2068) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.util.Scanner.findDelimiterAfter(Scanner.java:2038) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.util.Scanner.setTokenRegion(Scanner.java:1953) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.util.Scanner.next(Scanner.java:965) 04-19 11:34:21.890 9763-9763/? W/System.err: at java.util.Scanner.next(Scanner.java:941) 04-19 11:34:21.890 9763-9763/? W/System.err: at uz.newsign.mvp.ImplPresenter$3.call(ImplPresenter.java:121) 04-19 11:34:21.891 9763-9763/? W/System.err: at uz.newsign.mvp.ImplPresenter$3.call(ImplPresenter.java:115) 04-19 11:34:21.891 9763-9763/? W/System.err: at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:66) 04-19 11:34:21.891 9763-9763/? W/System.err: at rx.internal.operators.OperatorUnsubscribeOn$1.onNext(OperatorUnsubscribeOn.java:53) 04-19 11:34:21.891 9763-9763/? W/System.err: at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:227) 04-19 11:34:21.891 9763-9763/? W/System.err: at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107) 04-19 11:34:21.891 9763-9763/? W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 04-19 11:34:21.891 9763-9763/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 04-19 11:34:21.891 9763-9763/? W/System.err: at android.os.Looper.loop(Looper.java:148) 04-19 11:34:21.891 9763-9763/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5441) 04-19 11:34:21.891 9763-9763/? W/System.err: at java.lang.reflect.Method.invoke(Native Method) 04-19 11:34:21.891 9763-9763/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) 04-19 11:34:21.891 9763-9763/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 04-19 11:34:21.891 9763-9763/? W/System.err: Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: okhttp3.Response.class 04-19 11:34:21.891 9763-9763/? W/System.err: at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:70) 04-19 11:34:21.891 9763-9763/? W/System.err: ... 10 more

我做错了什么?还是错误?

推荐答案

.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())

订阅新线程并在mainThread上观察

subscribe on new thread and observe on mainThread

这篇关于带有okhttp的Android rxjava-NetworkOnMainThreadException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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