- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
各位程序员好,
我使用 RxAndroid 在按下按钮时每 3 秒进行一次间隔 API 调用。
private final CompositeDisposable disposables = new CompositeDisposable();
Observable fetchWeatherInterval = Observable.interval(3, TimeUnit.SECONDS)
.map(new Function<Long, String>() {
@Override
public String apply(Long aLong) throws Exception {
return getWeather("http://samples.openweathermap.org/data/2.5/weather?", "London,uk", "b1b15e88fa797225412429c1c50c122a1");
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observer displayWeatherInterval = new Observer<String>() {
@Override
public void onError(Throwable e) {
Log.e("Throwable ERROR", e.getMessage());
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
disposables.add(d);
}
@Override
public void onNext(String value) {
textViewWeatherInterval.append(value);
}
};
buttonFetchIntervalWeather.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fetchWeatherInterval.subscribe(displayWeatherInterval);
}
});
我的问题是是否有办法让按钮(或它的 onClick 监听器)也成为 Observable 并将其与其他按钮链接起来。
类似于 buttonFetchIntervalWeather.subscribe(fetchWeatherInterval);
最佳答案
Subscription s = RxView.clicks(button)
.throttleFirst(5, TimeUnit.SECONDS) // maybe you want to ignore multiple clicks
.flatMap(foo -> fetchWeatherInterval)
.subscribe(displayWeatherInterval);
throttleFirst
只是在接下来的 5 秒内停止进一步的事件,因此如果用户多次点击按钮,在接下来的 5 秒内不会再次触发相同的 fetchWeatherInterval
,当然。
flatMap
将一个 observable 的输出转换为另一个 observable,在本例中是从点击事件到 fetchWeatherInterval
。如果您需要更多信息,请阅读文档。
此外,RxJava2 也可以工作,我刚刚为 RxJava1 回答了这个问题。只需将订阅更改为一次性即可。
使用Observable.create()
:
Observable.create(new Action1<Emitter<View>>() {
@Override
public void call(Emitter<View> emitter) {
emitter.setCancellation(new Cancellable() {
@Override
public void cancel() throws Exception {
button.setOnClickListener(null);
emitter.onCompleted();
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
emitter.onNext(v);
}
});
}
}, Emitter.BackpressureMode.DROP);
或者使用 lambda:
Observable.create(emitter -> {
emitter.setCancellation(() -> {
button.setOnClickListener(null);
emitter.onCompleted();
});
button.setOnClickListener(emitter::onNext);
}, Emitter.BackpressureMode.DROP);
关于android - RxAndroid 按钮点击观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559952/
我在订阅方法中遇到了强制转换问题,我不知道为什么新的观察者会出现这个问题。 Observable getGrade = retrofit .create(GradeS
我正在使用 RxAndroid 在后台做一些事情。这是我的代码: Observable observable = Observable.create(new Observable.OnSubscrib
我正在使用 RxAndroid + Retrofit,我想做的是将 2 个操作合并为一个。例如我有两种方法。第一个在 onNext block 中返回一些 URL。 apiRequests.getAp
public List getOffices(){ final List offices = new ArrayList<>(); Observable observable = Ob
我正在使用适用于 Android 的 RXBle 库。为了从 BLE 外围设备(BLE 设备)读取数据,我最终设置了多个订阅,一个订阅一个,如下所示: Disposable scanSubsc
我正在使用 Android Studio。如何将 RxAndroid 作为子项目包含在我的项目中?我想从源代码构建它。我试过的:- 将其作为 git 子模块包含在内。-将其包含在我的项目 settin
我正在编写以下代码 fragment 以从 firebase 数据库中获取已保存食物的列表,然后使用该列表,我再次从 firebase 数据库中获取单个食物的详细信息。 以下代码工作正常,除了我无法弄
我是 RxJava 的新手。我有一个场景,我想调用第一个登录网络服务 (getLoginObservable),成功后,我想调用另一个网络服务 (getFetchDataObservable) 来获取
在使用 RxJava 和 Retrofit 上传多张图片时,我遇到了内存不足的问题。请检查下面的 Logcat。 Throwing OutOfMemoryError "Failed to alloca
所以我正在做一个由其他人开发的旧项目,碰巧项目中使用了 RxAndroid。 我不得不在一些应用程序的请求中添加缓存处理,而 OkHttp 缓存并没有像我需要的那样做得很好。所以我想出了实现我自己的服
我有这个问题 ;) 我试图调用这个用例,它最后返回一个 Observable。 但是,尽管使用了调度程序,但在主线程上不断被调用。我不知道为什么: 看起来像这样: class MainViewMode
各位程序员好, 我使用 RxAndroid 在按下按钮时每 3 秒进行一次间隔 API 调用。 private final CompositeDisposable disposables = new
我基于 RxJava 和这篇文章实现了一个简单的事件总线:http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-
有人知道如何使用 RxAndroid 从按钮点击中获取点击吗? 不,这不是重复的。改变太多了。 我试过: Events.click() ... 已被删除 RxTextView.editorAction
我正在使用给定的代码 here . 我将这些代码块作为类放在我项目的 util 包中。然后在主要 Activity 课上我写了这个.. class MenuActivity { // Variable
我有一个使用谷歌地图并监听相机变化的应用程序。我的问题是每次更改相机时我都必须请求我的后端。我想做的只是通过使用 RxAndroid/Java 去抖动来限制请求的数量。 我的代码是这样的: Obser
我在我的 Android 应用程序中使用 rxAndroid 和 rxKotlin 来异步处理网络请求。现在我只想在单击 Snackbar 按钮后重试失败的网络请求。 我现在的代码: val citi
我发现自己一遍又一遍地写: Observable.create(new Observable.OnSubscribe() { @Override public void
我正在尝试在 Rx3 中找到 subscribeOn 的主线程 Single.just(getHeavyData()) .subscri
我正在尝试找到一种并行执行请求并在每个可观察的完成时处理它们的方法。尽管所有可观察对象都做出响应时一切正常,但我没有看到一种方法来处理所有错误。 这是zip运算符的示例,它基本上并行执行2个请求: O
我是一名优秀的程序员,十分优秀!