Android输入字符串错误:插入数据库时遇问题求助
解决Android插入数据库时的字符串转整数错误
嘿,我一眼就发现问题所在了!你现在的代码里试图把带分隔符的日期、时间字符串直接转成整数,这必然会触发NumberFormatException——毕竟Integer.parseInt()根本没法解析带/或者:的字符串呀。
先看你代码里的问题核心:
int date = Integer.parseInt(mydp.getDayOfMonth() + "/" + (mydp.getMonth()+1) + "/" + mydp.getYear()); int time = Integer.parseInt(mytp.getHour() + ":" + mytp.getMinute());
比如生成的日期字符串是"15/10/2024",时间是"14:30",这些都不是合法的整数字符串,Java的整数解析器完全无法识别,自然会报错。
下面给你几个可行的解决思路:
方案1:直接用字符串存储日期和时间
如果你的数据库字段支持字符串类型,这是最简单的办法,直接跳过类型转换:
String date = mydp.getDayOfMonth() + "/" + (mydp.getMonth()+1) + "/" + mydp.getYear(); String time = mytp.getHour() + ":" + mytp.getMinute();
之后直接把这两个字符串插入数据库即可,后续查询出来也能直接展示给用户。
方案2:转换为时间戳存储(推荐)
如果需要对日期时间进行排序、比较或者计算,存储时间戳会更灵活。你可以先把日期和时间组合成标准格式的字符串,再解析成时间戳:
// 组合成yyyy-MM-dd HH:mm格式的字符串 String dateTimeStr = String.format("%d-%02d-%02d %02d:%02d", mydp.getYear(), mydp.getMonth() + 1, mydp.getDayOfMonth(), mytp.getHour(), mytp.getMinute()); // 用Java 8+的DateTimeFormatter解析(线程安全) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter); // 转换为毫秒级时间戳,存到数据库的long类型字段中 long timestamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
如果你的项目还在使用Java 7及以下,可以用SimpleDateFormat(注意线程不安全,尽量不要在多线程环境下共用实例):
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { Date date = sdf.parse(dateTimeStr); long timestamp = date.getTime(); } catch (ParseException e) { e.printStackTrace(); // 这里可以给用户提示日期时间解析失败,比如弹窗提醒 }
方案3:拆分字段存储
如果数据库设计允许,也可以把日期和时间拆分成多个整数字段存储:
int year = mydp.getYear(); int month = mydp.getMonth() + 1; int day = mydp.getDayOfMonth(); int hour = mytp.getHour(); int minute = mytp.getMinute();
这种方式的好处是后续做筛选(比如查询2024年10月的所有活动)或者日期计算会更方便,不需要再解析字符串。
最后别忘了,处理用户输入相关的转换时,一定要加上异常捕获逻辑,避免因为格式问题导致APP崩溃,同时给用户友好的错误提示哦~
内容的提问来源于stack exchange,提问作者Godymn
相关产品推荐
相关产品推荐

