You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于API返回秒级数据实现ends_in倒计时并展示于TextView

Hey there! Let's get that countdown up and running for your TextView using the ends_in value from your API response. I'll walk you through a simple, reliable approach tailored for Android:

实现基于API返回ends_in的TextView倒计时

1. 解析API数据提取倒计时总秒数

First, we need to pull the ends_in value from your JSON response. You can use either manual JSON parsing or a library like Gson—here's the manual approach (no extra dependencies needed):

try {
    // 假设apiResponse是你从API获取到的JSON字符串
    String apiResponse = "{ \"now\": [{ \"time\": { \"starts_in\": 0, \"ends_in\": 2272, \"starts_at\": 0, \"ends_at\": \"2018-01-27T08:00:00.205Z\" }] }";
    
    JSONObject rootObject = new JSONObject(apiResponse);
    JSONArray nowArray = rootObject.getJSONArray("now");
    JSONObject timeObject = nowArray.getJSONObject(0).getJSONObject("time");
    
    // 提取总倒计时秒数
    long totalCountdownSeconds = timeObject.getLong("ends_in");
} catch (JSONException e) {
    // 处理解析异常,比如打印日志或提示用户
    e.printStackTrace();
}

2. 用Android自带CountDownTimer实现倒计时

Android's built-in CountDownTimer is perfect for this—it handles the timing logic and UI updates safely on the main thread:

// 先获取你的TextView实例
TextView countdownTextView = findViewById(R.id.your_countdown_tv);

// 初始化倒计时器:参数1是总时长(毫秒),参数2是每隔多久触发一次更新(这里1秒一次)
CountDownTimer countdownTimer = new CountDownTimer(totalCountdownSeconds * 1000, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        // 将剩余毫秒转换为时分秒格式
        long remainingSeconds = millisUntilFinished / 1000;
        long hours = remainingSeconds / 3600;
        long minutes = (remainingSeconds % 3600) / 60;
        long seconds = remainingSeconds % 60;
        
        // 格式化显示为 HH:MM:SS 格式,不足两位补0
        String displayText = String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, seconds);
        countdownTextView.setText(displayText);
    }

    @Override
    public void onFinish() {
        // 倒计时结束后的操作
        countdownTextView.setText("倒计时结束!");
        // 这里可以添加逻辑:比如刷新API、弹出提示等
    }
};

// 启动倒计时
countdownTimer.start();

3. 关键注意事项

  • 内存泄漏防护:把CountDownTimer存为Activity/Fragment的成员变量,在onDestroy()或onPause()中调用countdownTimer.cancel(),避免内存泄漏
  • 异常处理:一定要把JSON解析放在try-catch块里,防止API返回格式异常导致崩溃
  • 灵活格式化:如果不需要显示小时(比如当剩余时间小于1小时),可以调整格式化逻辑只显示分秒
  • 有效性校验:确保ends_in是正数,否则倒计时会直接触发onFinish()

内容的提问来源于stack exchange,提问作者user9275591

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:35:22