【发布时间】:2019-07-30 14:09:52
【问题描述】:
在这里学习 RX 实现。
我的问题: 可以在没有任何异步任务/可运行的情况下在这里运行此代码吗? 据我了解,RX 为自己制作了新线程。它可以运行吗? 此代码返回 NetworkOnMainThreadException
类TestInternet
public class TestInternet implements SOService.TestInternet {
//TIMEOUT EN MILISEGUNDOS
private final int MILISECONDS = 3000;
@Override
//returns the observable with connection/no connection
public Observable <Boolean> getObservableConnection(String filter) {
Observable<Boolean> networkAvalaible;
try {
URL myUrl = new URL("http://flickr.com");
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(MILISECONDS);
connection.connect();
networkAvalaible = Observable.just(true);
} catch (Exception e) {
//I'm catching NetworkInMainThreadException here
e.printStackTrace();
networkAvalaible = Observable.just(false);
Log.d("error en testinternet",e.toString());
}
return networkAvalaible.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
来自presenter.java
testInternet.getObservableConnection(filtro).subscribeWith(getConnectionObserver());
//comprueba conexión
public DisposableObserver<Boolean> getConnectionObserver() {
return new DisposableObserver<Boolean>() {
@Override //envia los datos al recyclerview
public void onNext(@NonNull Boolean aBoolean) {
Log.d("rx","CONNECTION HAY NEXT");
//envia los datos al recyclerview
if (!aBoolean){
Log.d("connnexcion", aBoolean.toString());
mainView.showError(mainView.getContext().getText(R.string.no_connected).toString());
}else if (aBoolean){
Log.d("connnexcion", "on next correcto");
mainView.hideError();
}
}
【问题讨论】:
-
你有权限吗?
-
INTERNET & ACCESS_NETWORK_STATE
-
你实现了 Observable 吗?
-
Марат Зангиев 的回答完美地解释了。需要从观察者内部调用(不仅仅是返回观察者真或假)
-
很好,这很重要!
标签: java android system.reactive