此系列的文章将会给大家带来有关于RxJava2在项目中常用的场景案例。
在项目中经常会用到获取验证码的场景,通常发送一次验证码后,需要间隔60秒才可以再次点击按钮获取验证码,那如何实现呢,请看以下示例。
为了演示方便,字符串直接写在了代码里,按钮背景颜色没有用选择器,在实际项目中不建议这么做,在此只为演示方便。
后续补充gif图。
package com.gobagou.rxjava2javademo;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
public class Rxjava2BtnActivity extends AppCompatActivity {
private static final String TAG = "Rxjava2BtnActivity";
private Button mBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rxjava2_btn);
mBtn = findViewById(R.id.sent_btn);
}
public void click(View view) {
final int count = 60;
Observable.interval(0, 1, TimeUnit.SECONDS)
.take(count + 1)
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return count - aLong;
}
})
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
mBtn.setEnabled(false);
mBtn.setBackgroundColor(Color.GRAY);
}
})
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long aLong) {
mBtn.setText("剩余" + aLong + "秒");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
mBtn.setEnabled(true);
mBtn.setBackgroundColor(getResources().getColor(R.color.colorAccent));
mBtn.setText("发送数据");
}
});
}
}
网友评论