gpt4 book ai didi

android - RxJava Android toMap 运算符停止执行

转载 作者:行者123 更新时间:2023-11-30 01:50:26 29 4
gpt4 key购买 nike

你好,我尝试使用 rx java 来完成下一个任务

  1. 显示表单字段
  2. 在错误的字段上显示错误
  3. 返回有效字段的 Observable> -> 值

解决方案

List<Observable<RxUtil.EditTextEvent>> listOfObs = new ArrayList<>();

...fill form, fill listOfObs

return Observable.merge(listOfObs) // stream of EdtText events
.debounce(5, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext((onTextChangeEvent) -> { // show error, if user made mistake
if (!CheckOutUtils.isInputCorrect(onTextChangeEvent))
onTextChangeEvent.editText.setError("Проверьте поле");
})
.filter(CheckOutUtils::isInputCorrect) // only valid fields
.toMap(editTextEvent -> (Field) editTextEvent.editText.getTag(), editTextEvent -> editTextEvent.text) // called on every change
.doOnNext(fieldStringMap -> {
Log.v("map", fieldStringMap.toString()); // never called
}); // map of it

永远不会调用最后一个运算符。 toMap 是最后执行的运算符。怎么了?

最佳答案

我会监听文本更改事件并以某种方式扫描所有文本字段:

List<TextField> fields = ...

Observable<TextField> all = Observable.from(fields);

all
.flatMap(f -> RxUtil.textChangedObservable(f))
.debounce(5, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.flatMap(f ->
all
.filter(f -> isCorrect(f.getText()))
.toMap(f -> f.getTag(), f -> getText())
)
.subscribe(System.out::println);

我不熟悉 RxUtil,但您可能会找到必要的方法。

关于android - RxJava Android toMap 运算符停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33134233/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com