0
我正在每3秒做一次天气API调用,并将结果附加到使用showWeather(“天气”)的textView中,但我相信有更好的方法来做到这一点。我不知道为什么我需要创建Class Func1,但是因为地图需要它。还有一种方法可以缩短观察者吗?不幸的是我不使用lamda。有什么建议么?RxAndroid间隔API调用。有没有更好的办法?
Observer myObserver = new Observer<String>() {
@Override
public void onError(Throwable e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
showWeather(value);
}
};
class Func1<T, T1> implements io.reactivex.functions.Function<Long, String > {
@Override
public String apply(Long aLong) throws Exception {
return getJSON("http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1",300);
}
}
Observable.interval(3, TimeUnit.SECONDS)
.map(new Func1<Long, Observable<String>>() {
}).observeOn(AndroidSchedulers.mainThread()).subscribe(myObserver);
我想:
Observable
.interval(3, SECONDS)
.subscribeOn(Schedulers.io())
.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return getJSON("http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1", 300);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(myObserver)
,但我得到:
03-07 21:47:25.982 21181-21181/com.alex.rxandroidexamples E/imerExampleFragment $ 1 $ 1:空 android.os.NetworkOnMainThreadException at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
另外如何取消订阅onPause或onPause?
是什么让你说你想有更好的办法吗?这是'interval'的一个非常直接的用法。 –
上午使用Func1因为我看到它间隔拍摄双打,我需要像地图传递观察员的字符串。这看起来不方便。我试过Observable.interval(3,TimeUnit.SECONDS) –
当然你需要'Func1',来自间隔的计数不是感兴趣的项目。但是你所拥有的恰恰是使用'map'将输入转换为新输出的预期模式。再说一次,你认为对此不理想吗? –