【问题标题】:App crashes on using DateTime picker - Invalid value for MonthOfYear (valid values 1 - 12): 0使用日期时间选择器时应用程序崩溃 - MonthOfYear 的值无效(有效值 1 - 12):0
【发布时间】:2022-01-16 07:49:51
【问题描述】:

我一直在为基于 Kotlin 的 Android 应用程序使用 DateTime 选择器而没有任何问题,直到我注意到在使用 DateTime 选择器时应用程序崩溃了。在进一步的测试中,我发布它主要是在 1 月份崩溃,并突出显示以下错误。我尝试从 Java 1.8 迁移到 1.7,但随后我失去了应用程序中的其他功能......关于如何克服这个问题的任何建议?这似乎是一个已知问题,但我无法找到原因/正确的解决方案

应用程序在从日历中获取 YearMonth 时崩溃

            val currentMonth = YearMonth.of(
                calendar.get(java.util.Calendar.YEAR),
                calendar.get(java.util.Calendar.MONTH)
            )

Fatal Exception: java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0
   at java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311)
   at java.time.temporal.ChronoField.checkValidValue(ChronoField.java:730)
   at java.time.YearMonth.of(YearMonth.java:221)
   at in.latom.latom.MainActivity.onCreate$lambda-11$lambda-10(MainActivity.kt:505)
   at in.latom.latom.MainActivity.$r8$lambda$fB3ERyY00fXDUSdrgD0tpQQiN-Y()
   at in.latom.latom.MainActivity$$ExternalSyntheticLambda11.onDateSet(:8)
   at android.app.DatePickerDialog.onClick(DatePickerDialog.java:173)
   at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:188)
   at android.os.Handler.dispatchMessage(Handler.java:106)
   at android.os.Looper.loop(Looper.java:246)
   at android.app.ActivityThread.main(ActivityThread.java:8595)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

【问题讨论】:

  • 方法期望值从 1 到 12 并且您在 1 月份发送 0。如果将传递给方法的值增加一,它应该可以解决问题。
  • Java 通过 DateTimePicker 提供的值 0 此时应用程序崩溃 - val currentMonth = YearMonth.of( calendar.get(java.util.Calendar.YEAR), calendar.get( java.util.Calendar.MONTH) )
  • 你不应该使用Calendar。它已经过时,也令人困惑,因为它是这里问题的原因。
  • 您建议我可以探索的任何替代方案? java.time 是否适合使用?抱歉,我是新手,我在这里偷偷摸摸

标签: java android kotlin datetimepicker


【解决方案1】:

我会使用 LocalDateTime。例如val month = LocalDateTime.now().getMonth()val month = LocalDateTime.now().getMonthValue() 以 int 形式返回月份,从 1 到 12

参考:https://developer.android.com/reference/kotlin/java/time/LocalDateTime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2016-01-04
    相关资源
    最近更新 更多