当前位置:  开发笔记 > Android > 正文

RxJava和Retrofit2:NetworkOnMainThreadException

如何解决《RxJava和Retrofit2:NetworkOnMainThreadException》经验,为你挑选了2个好方法。



1> Ilya Tretyak..:

将代码的最后一部分重写为:

service.getOneTestRx()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Subscriber() {
        @Override
        public void onCompleted() {
            Log.d(TAG, "[onCompleted] ");
        }

        @Override
        public void onError(Throwable t) {
            Log.d(TAG, "[onError] ");
            t.printStackTrace();
        }

        @Override
        public void onNext(MyTest m) {
            Log.d(TAG, "[onNext] " + m.toString());
        }
    });

来自@akarnokd的重要提示:

值得一提的是,需要将调用链接到此处,因为Observable不是构建器模式(您修改现有对象的设置)


值得一提的是,需要将调用链接到此处,因为Observable不是构建器模式(您可以在其中修改现有对象的设置).
解释也值得一提。OP为什么要这样重写,为什么您的变量正确?我不是要我自己。一个好的答案应该有这个。

2> 小智..:

你应该打电话Observable.unsubscribeOn(Schedulers.io()),retrofit在http请求结束时取消订阅.

RxJavaCallAdapterFactoryretrofit-rxjava-adapter

它是这样的行动.

if (!subscriber.isUnsubscribed()) {
    subscriber.onCompleted();
}

但是,当subscriberSafeSubscriber,它会调用unsubscribe最后.

我在我的应用程序中遇到此问题.

完整代码:

o.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .unsubscribeOn(Schedulers.io());


@ahmedre他们永远不会......"那不是改造或OkHttp问题"
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有