android - RxBinding出错后如何重新绑定(bind)View?

标签 android rx-java

RxJava 是一个很棒的东西,因为它帮助我处理异步任务。 但是当我使用 RxBinding 将 View 与他们的点击事件绑定(bind)时,我发现如果发生错误并且绑定(bind)事件将不再被调用。 为了解释我的问题,我在一个简单的 Activity 中简化了我的代码。

public class Test extends RxAppCompatActivity {
int i = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Button button = new Button(this);
    button.setText("Click");
    setContentView(button);
    RxView.clickEvents(button)
            .compose(this.<ViewClickEvent>bindToLifecycle())
            .map(new Func1<ViewClickEvent, Integer>() {
                @Override
                public Integer call(ViewClickEvent viewClickEvent) {
                    --i;
                    return 5 / i;
                }
            })
            .subscribe(new Observer<Integer>() {
                @Override
                public void onCompleted() {
                    Log.d("Test", "Completed");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d("Test", "Error");
                }

                @Override
                public void onNext(Integer integer) {
                    Log.d("Test", "Result :" + integer);
                }
            });
     }
}

你可以看到,如果我点击这个按钮超过 3 次,logcat 将不再打印日志。

我想知道发生错误后如何重新绑定(bind)此 View 。

最佳答案

我认为最好的方法是在这种情况下完全不依赖 onError

我相信我在某处读到 Rx 中的 onError 旨在仅用于不可预见的错误,而不是用于正常的控制流——很像异常。

因此,根据您希望在 i 命中 0 的情况下发生什么,您可以:

另一个注意事项:我不确定 RxJava 社区在多大程度上插入了这种观点,但在其他一些 FRP 实现(例如 Sodium)中,传递给 map 的函数应该非常纯粹,我。 e.他们不应影响或受其输入以外的任何事物的影响。

关于android - RxBinding出错后如何重新绑定(bind)View?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33909081/

相关文章:

javascript - 如何通过 javascript 单击 html 链接访问 SDcard ..?

android - 基于 Observable 的 API 和取消订阅问题

android - 为什么样式和布局不使用 android 命名空间?

android - 崩溃 fragment

android - 例如,如何在一年后锁定 Web 移动应用程序?

rx-java - 如何添加超时来检测 Observable 有一段时间没有发出

java - 如何使用rxJava正确调用retrofit服务?

android - 这两种说法有什么区别?

android - RxJava-发出新项目时如何停止正在运行的任务

java - 在 RxJava 中调用 onNext 之间暂停