Kotlin日期选择后点击OK应用崩溃求助(附代码)
问题解决:日期选择后计算年龄分钟数导致应用崩溃
问题描述
- 原代码仅显示日期时运行正常,添加年龄分钟数计算逻辑后,选择出生日期点击OK按钮应用崩溃
- 期望实现:选择日期后同时显示所选日期及对应的年龄分钟数
错误原因
从报错的空指针异常和代码逻辑来看,核心问题有两个:
- 日期格式不匹配:代码中用
SimpleDateFormat("dd.MM.yyyy")解析日期,但拼接的selectedDate用的是斜杠/分隔(格式为dd/MM/yyyy),格式不匹配导致parse()方法返回null,后续调用thedate.time触发空指针异常 - 日期变量错误:拼接
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
相关产品推荐
相关产品推荐

