版权声明:天际流火叩响大地之门,岁月星辰刻画沧桑年轮! https://blog.csdn.net/ytfunnysite/article/details/82500735
点击事件:
RxView.clicks(btnStopService)
.throttleFirst(2, TimeUnit.SECONDS)
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) {
stopService(new Intent(context, MyService.class));
showToast("关闭Service服务");
Log.d(TAG, "accept: 关闭Service服务");
}
});
表单验证(账号密码同时验证)
Observable.combineLatest(RxTextView.textChanges(editName).map(new Function<CharSequence, String>() {
@Override
public String apply(CharSequence charSequence) throws Exception {
return String.valueOf(charSequence.toString());
}
}), RxTextView.textChanges(editPwd).map(new Function<CharSequence, String>() {
@Override
public String apply(CharSequence charSequence) throws Exception {
return String.valueOf(charSequence);
}
}), new BiFunction<String, String, Boolean>() {
@Override
public Boolean apply(String s, String s2) {
return isNameValid(s)&&isPwdValid(s2);
}
}).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean){
btn1.setEnabled(true);
RxView.clicks(btn1).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) {
showToast("Login Success");
}
});
}else {
showToast("Login Fail");
}
}
});
倒计时获取验证码
verifyCodeObservable=RxView.clicks(btnGetCode)
.throttleFirst(SECOND,TimeUnit.SECONDS)//20内只允许点击一次,防止抖动
.subscribeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Object>() {
@Override
public void accept(Object o) {
try {
RxView.enabled(btnLogin).accept(false);
} catch (Exception e) {
e.printStackTrace();
}
}
});
verifyCodeObservable.subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
.take(20)//设置上限20次
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long value) {
try {
RxTextView.text(btnGetCode).accept("剩余 "+(SECOND-value)+"秒" );
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
try {
RxTextView.text(btnGetCode).accept("再次获取验证码");
RxView.enabled(btnLogin).accept(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
}
private Toast mToast;
protected void showToast(String desc) {
if (mToast == null) {
mToast = Toast.makeText(this.getApplicationContext(), desc, Toast.LENGTH_SHORT);
} else {
mToast.setText(desc);
}
mToast.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
verifyCodeObservable.unsubscribeOn(AndroidSchedulers.mainThread());//防止泄露
}
}