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

Kotlin日期选择后点击OK应用崩溃求助(附代码)

问题解决:日期选择后计算年龄分钟数导致应用崩溃

问题描述

  • 原代码仅显示日期时运行正常,添加年龄分钟数计算逻辑后,选择出生日期点击OK按钮应用崩溃
  • 期望实现:选择日期后同时显示所选日期及对应的年龄分钟数

错误原因

从报错的空指针异常和代码逻辑来看,核心问题有两个:

  1. 日期格式不匹配:代码中用SimpleDateFormat("dd.MM.yyyy")解析日期,但拼接的selectedDate用的是斜杠/分隔(格式为dd/MM/yyyy),格式不匹配导致parse()方法返回null,后续调用thedate.time触发空指针异常
  2. 日期变量错误:拼接selectedDate时使用的是初始化时获取的系统当前日期(DayOfMonth、month、Year),而非用户在DatePickerDialog中选择的日期参数(year、Month、dayOfMonth),导致日期值完全错误

修复后的完整代码

fun Calendara() {
    val myCalendar = Calendar.getInstance()
    val initYear = myCalendar.get(Calendar.YEAR)
    val initMonth = myCalendar.get(Calendar.MONTH)
    val initDay = myCalendar.get(Calendar.DAY_OF_MONTH)
    
    val dpd = DatePickerDialog(
        this,
        DatePickerDialog.OnDateSetListener { _, selectedYear, selectedMonth, selectedDay ->
            // 使用用户选择的日期拼接字符串
            val selectedDate = "$selectedDay/${selectedMonth + 1}/$selectedYear"
            datet?.text = selectedDate
            Toast.makeText(this, selectedDate, Toast.LENGTH_LONG).show()

            // 格式化规则与日期字符串格式保持一致
            val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH)
            val theDate = sdf.parse(selectedDate)
            
            // 判空处理,避免parse失败触发空指针
            theDate?.let {
                val dateInMinutes = it.time / 60000
                val currentInMinutes = System.currentTimeMillis() / 60000
                val minuteDifference = currentInMinutes - dateInMinutes
                minutes?.text = minuteDifference.toString()
            }
        },
        initYear,
        initMonth,
        initDay
    )
    dpd.datePicker.maxDate = System.currentTimeMillis() - 8640000
    dpd.show()
}

关键修复说明

  • 修正日期来源:将拼接日期字符串的变量替换为用户选择的selectedDay、selectedMonth、selectedYear,确保使用正确的日期值
  • 统一格式规则:调整SimpleDateFormat的格式为"dd/MM/yyyy",和拼接的日期字符串格式完全匹配,保证parse()能正确解析
  • 添加空指针防护:用let函数对解析后的theDate进行判空,防止解析失败时出现空指针异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:36