尽管存在RxJava2 subscriptionOn(Schedulers.io),但NetworkOnMainThreadException

时间:2018-10-19 17:11:36

标签: android rx-java2 subscription

最近尝试学习RxJava,我想用RxJava2替换我在Viewmodel类中的Android异步任务。但是,当我运行它时,运行以下命令时会出现“ NetworkOnMainThreadException”异常:

 private void requestLocationDetails() {
    try {
        compositeDisposable.add(Observable
                .just(JsonRestCaller.readJsonFromUrl(buildUrl()))
                .subscribeOn(Schedulers.io())
                .subscribeWith(new DisposableObserver<JsonObject>() {
                    @Override
                    public void onNext(JsonObject jsonObject) {
                        try {
                            parseJson(jsonObject);
                        } catch (IOException e) {
                            Log.e(TAG, e.getMessage());
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                    }
                }));
    } catch (IOException e) {
        Log.e(TAG, e.getMessage());
}

据我了解,

  

.subscribeOn(Schedulers.io())

使我的方法在后台线程上运行,但Android另有说明。我在这里想念东西吗?

1 个答案:

答案 0 :(得分:0)

首先,subscribeon只是使您订阅另一个线程上的可观察对象。它的watchOn在另一个线程上运行onNext。但是,我认为这不是您的问题。它只是在此线程上运行。 just函数被立即调用并由observable发出,因此在您刚刚调用的线程上调用了它。