RxJava创建倒计时器

用RxJava创建一个倒计时计时器,感觉是一个很简单的事情,用intervalRange操作符就可以搞定了。但是我的场景是,需要点击Button(重新获取数据)去进行网络请求,将请求的结果进行UI显示,并进行倒计时计算。网络请求的返回体如下所示:

public class Response {
    private String data;	// 网络请求的数据
    private long countDownSeconds;		// 剩余的时间数,单位 s
}

在这里插入图片描述
我的初步实现如下(MainActivity.java):

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private Disposable disposable;
    private TextView countDownMsgTv, dataTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.bt_click);
        countDownMsgTv = findViewById(R.id.tv_count_down);
        dataTv = findViewById(R.id.tv_data);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Observable.just(getResponse())   // mock网络请求
                       .subscribeOn(Schedulers.io())
                       .observeOn(AndroidSchedulers.mainThread())
                       .subscribe(new Consumer<Response>() {
                           @Override
                           public void accept(Response response) throws Exception {
                               dataTv.setText(response.getData());

                               // 计时器
                               countDown(response.getCountDownSeconds());
                           }
                       });
            }
        });

    }
    // 使用RxJava来构建计时器
    private void countDown(final long countDownSeconds){
        Observable.intervalRange(0, countDownSeconds, 0, 1, TimeUnit.SECONDS)
                .map(new Function<Long, Long>() {
                    @Override
                    public Long apply(Long aLong) throws Exception {
                        return countDownSeconds -aLong;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Long>(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值