SimpleDateFormat 并将其保存在 SharedPreferences 中

SimpleDateFormat and Save it in SharedPreferences

提问人:Cortod 提问时间:6/21/2023 最后编辑:Cortod 更新时间:6/21/2023 访问量:30

问:

我正在使用这种结构:

` 类 FT02Activ01:AppCompatActivity() {

private lateinit var data1: TextView



override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_ft02_activ01)
    data1 = findViewById(R.id.data)

    loadData()


override fun onStart() {
    super.onStart()

    data1.text = SimpleDateFormat("dd/MM/yyyy").format(System.currentTimeMillis())
    val cal = Calendar.getInstance()
    val dateSetListener =
        DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
            cal.set(Calendar.YEAR, year)
            cal.set(Calendar.MONTH, monthOfYear)
            cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)

            val myFormat = "dd/MM/yyyy"
            val sdf = SimpleDateFormat(myFormat, Locale.US)
            data1.text = sdf.format(cal.time)

        }

    data1.setOnClickListener {
        DatePickerDialog(
            this, dateSetListener,
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH)
        ).show()
    }
}






 private fun saveData() {
    val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
    val editor = sharedPreferences.edit()
    editor.putString("data_KEY", data1.text.toString())
    editor.apply()
}

 private fun loadData(){
    val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
    val savedString = sharedPreferences.getString("STRING_KEY", null)

    data1.text = sharedPreferences.getString("data_KEY", null)

`

如果我将 data1 更改为 19/06/2023 并继续并返回此页面,它将带回 20/06/2023,而不是 19/06/2023

我的期望是什么时候去并返回屏幕,我得到 19/06/2023

Android Kotlin 日期时间

评论


答:

0赞 Cortod 6/21/2023 #1

onStart() {
   ...
           //DATA

        if (data1.text.isEmpty()) {
            val currentDate =
                SimpleDateFormat("dd/MM/yyyy", Locale.US).format(System.currentTimeMillis())
            data1.text = currentDate
        }



        val cal = Calendar.getInstance()
        val dateSetListener =
            DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
                cal.set(Calendar.YEAR, year)
                cal.set(Calendar.MONTH, monthOfYear)
                cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)

                val myFormat = "dd/MM/yyyy"
                val sdf = SimpleDateFormat(myFormat, Locale.US)
                data1.text = sdf.format(cal.time)

            }

        data1.setOnClickListener {
            DatePickerDialog(
                this, dateSetListener,
                cal.get(Calendar.YEAR),
                cal.get(Calendar.MONTH),
                cal.get(Calendar.DAY_OF_MONTH)
            ).show()
        }

IF 语句解析

0赞 ndriqa 6/21/2023 #2
  1. 我真的没有看到你在任何地方保存数据。您根本没有使用该方法。saveData()
  2. 即使您从 中加载数据,您也会覆盖新数据。基本上,Android Activity 生命周期状态将在 .(在 onStart()' 方法上加载日期)sharedPreferencesonStart()onCreate()onCreate() and then you set another date on the
  3. 您在方法上设置的新日期不是保存的日期,而是当前日期(onStart()System.currentTimeMillis())

我建议您阅读有关 Android Activity 和 Fragment Lifecycle 的更多信息,并查看 sharedPreferences 用法的一些示例。

顺便说一句,在保存时间对象时,您可以保存日期的千分之一并转换为日期对象,因为使用日期操作会给转换带来新的麻烦。String

评论

0赞 Cortod 6/22/2023
是的,保存 Data() 在我没有共享的代码的另一部分