【问题标题】:App crashes when the user changes the device language当用户更改设备语言时应用程序崩溃
【发布时间】:2014-12-06 13:25:10
【问题描述】:

我有一个应用程序,它在文件中存储一些包含String date 的对象,此字符串用于某些操作需要解析为GregorianCalendar。现在我发现了这个问题: 当用户在创建文件后更改设备语言时,应用程序将无法正确处理存储的文件并崩溃并返回此错误

java.text.ParseException: Unparseable date: "27 Sep 2014 23:09:07" (at offset 3)
10-11 14:20:09.573    3745-3745/uk.myapp W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:561)

返回这个错误的方法是this

   public static GregorianCalendar stringInCalendar(String s, String formatPattern) {
        DateFormat format = new SimpleDateFormat(formatPattern);
        Date date = null;
        try {
            date = format.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal;
    }

错误发生在这个line date = format.parse(s);

我该如何解决这个问题?

请注意,无论日期类型如何,只有在更改设备语言时才会发生此错误。如果设备语言保持不变,该方法不会导致任何崩溃

【问题讨论】:

    标签: android parse-error gregorian-calendar


    【解决方案1】:

    在这一行

    DateFormat format = new SimpleDateFormat(formatPattern);
    

    您使用默认语言环境,并且默认语言环境与设备的当前语言相关联,如果您更改语言,则默认语言环境与用于存储导致​​错误的字符串的语言环境不匹配。

    为避免此问题,您必须存储用于获取String dateLocale 并将其传递给DateFormat

    DateFormat format = new SimpleDateFormat(formatPattern, localeOfTheDateString);
    

    或将日期直接存储为GregorianCalendar 对象

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2017-09-19
      • 2013-10-27
      • 1970-01-01
      • 2012-07-29
      • 2016-12-13
      相关资源
      最近更新 更多