如何将时间选择器选中的值保存到SharedPreferences中?
不管是存整数还是字符串,核心是保证读写逻辑一致,以下是具体实现步骤:
一、保存选中的时间
当用户确认时间选择后,把值存入SharedPreferences:
方案1:分开存储小时和分钟(推荐,避免解析错误)
// 获取SharedPreferences实例,"TimePrefs"是自定义的存储文件名 SharedPreferences sp = getSharedPreferences("TimePrefs", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); // 从时间选择器获取选中的小时和分钟 int selectedHour = timePicker.getHour(); int selectedMinute = timePicker.getMinute(); // 写入数据 editor.putInt("saved_hour", selectedHour); editor.putInt("saved_minute", selectedMinute); // 提交保存,apply()是异步操作,比commit()更适合主线程 editor.apply();
方案2:存储为字符串格式
如果偏好存成"HH:mm"的字符串,代码如下:
SharedPreferences sp = getSharedPreferences("TimePrefs", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); int selectedHour = timePicker.getHour(); int selectedMinute = timePicker.getMinute(); String timeStr = String.format("%02d:%02d", selectedHour, selectedMinute); editor.putString("saved_time", timeStr); editor.apply();
二、启动应用时恢复时间
在Activity的onCreate方法中读取存储的值,设置回时间选择器:
对应方案1的恢复逻辑
SharedPreferences sp = getSharedPreferences("TimePrefs", MODE_PRIVATE); // 第二个参数是默认值,比如初始设为0点0分 int savedHour = sp.getInt("saved_hour", 0); int savedMinute = sp.getInt("saved_minute", 0); // 把值设置给时间选择器 timePicker.setHour(savedHour); timePicker.setMinute(savedMinute);
对应方案2的恢复逻辑
SharedPreferences sp = getSharedPreferences("TimePrefs", MODE_PRIVATE); String savedTime = sp.getString("saved_time", "00:00"); // 拆分字符串得到小时和分钟 String[] timeParts = savedTime.split(":"); int savedHour = Integer.parseInt(timeParts[0]); int savedMinute = Integer.parseInt(timeParts[1]); // 设置回时间选择器 timePicker.setHour(savedHour); timePicker.setMinute(savedMinute);
排查要点
- 确保读写用的是同一个SharedPreferences名称(比如都是"TimePrefs")
- 保存后必须调用
apply()或commit(),否则数据不会持久化 - 用字符串存储时,务必保证格式统一(比如补零),避免拆分解析时抛出异常
内容的提问来源于stack exchange,提问作者مجهول
相关产品推荐
相关产品推荐

