最近尝试学习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另有说明。我在这里想念东西吗?
答案 0 :(得分:0)
首先,subscribeon只是使您订阅另一个线程上的可观察对象。它的watchOn在另一个线程上运行onNext。但是,我认为这不是您的问题。它只是在此线程上运行。 just函数被立即调用并由observable发出,因此在您刚刚调用的线程上调用了它。