在Android Studio中,我收到了Java.text.DateFormat的错误

时间:2016-10-26 14:12:44

标签: java android android-studio simpledateformat

我正在尝试更改以下代码,以便在Android环境中更好地用作即将发布的API的一部分。

public class DateFormatter implement JsonDeserializer<Date>,
        JsonSerializer<Date> {

private final DateFormat[] formats;

public DateFormatter() {
    formats = new DateFormat[3];
    formats[0] = new SimpleDateFormat(DATE_FORMAT);
    formats[1] = new SimpleDateFormat(DATE_FORMAT_V2_1);
    formats[2] = new SimpleDateFormat(DATE_FORMAT_V2_2);
    final TimeZone timeZone = TimeZone.getTimeZone("Zulu"); //$NON-NLS-1$
    for (DateFormat format : formats)
        format.setTimeZone(timeZone);
}

public Date deserialize(JsonElement json, Type typeOfT,
        JsonDeserializationContext context) throws JsonParseException {
    JsonParseException exception = null;
    final String value = json.getAsString();
    for (DateFormat format : formats)
        try {
            synchronized (format) {
                return format.parse(value);
            }
        } catch (ParseException e) {
            exception = new JsonParseException(e);
        }
    throw exception;
}

public JsonElement serialize(Date date, Type type,
        JsonSerializationContext context) {
    final DateFormat primary = formats[0];
    String formatted;
    synchronized (primary) {
        formatted = primary.format(date);
    }
    return new JsonPrimitive(formatted);
  }
}

我不需要支持v2.1和v2.2。所以我一直试图删除数组,并为单个实例编写代码。我遇到了一些错误。

这是我到目前为止所做的:

class DateFormatter implements JsonDeserializer<Date>,
    JsonSerializer<Date> {

private DateFormat formats;

DateFormatter() {
    formats = new DateFormat;
    formats = new SimpleDateFormat(String.valueOf(R.string.date_format), Locale.ENGLISH);
    final TimeZone timeZone = TimeZone.getTimeZone("Zulu");
    for (DateFormat format : formats)
        format.setTimeZone(timeZone);

}

public Date deserialize(JsonElement json, Type typeOfT,
                        JsonDeserializationContext context) throws JsonParseException {
    JsonParseException exception = null;
    final String value;
    value = json.getAsString();
    for (DateFormat format : formats)
        try {
            synchronized (format) {
                return format.parse(value);
            }
        } catch (ParseException e) {
            exception = new JsonParseException(e);
        }
    throw exception;
}

public JsonElement serialize(Date date, Type type,
                             JsonSerializationContext context) {
    final DateFormat primary;
    primary = formats;
    String formatted;
    synchronized (primary) {
        formatted = primary.format(date);
    }
    return new JsonPrimitive(formatted);
  }
}

但是,一旦我明白这一点,我就会收到错误。我目前关注的主要问题是getString。

我在这里做错了什么?

编辑:

@trooper我无法构建项目,所以我无法提取--stacktrace --debug

我更改了帖子中的第二个代码块以反映我当前的代码。我改变了;

formats = new SimpleDateFormat(getString(R.string.date_format), Locale.ENGLISH); 

formats = new SimpleDateFormat(String.valueOf(R.string.date_format), Locale.ENGLISH);

这纠正了我的第一个问题。

所以,现在已经回答了,继续我的下一个问题。正如您所看到的,我将从第一个块中的数组移动到第二个块中的单个实例。这条线

for (DateFormat format : formats)

&#34;格式&#39;抛出一个不适用于java.text.DateFormat&#39;

的foreach

我知道foreach用于数组,我不知道如何删除循环的那部分并实现我需要的......这是我真正迷失的地方。

我的最终目标是将用Java编写的当前GitHib APIv3转换为支持API v2&amp;的Eclipse Studio。 v3,转到Android GitHub API v3,因为我们不需要覆盖v2。

我希望这次编辑能够回答足够的信息。

1 个答案:

答案 0 :(得分:0)

格式未声明为数组。您需要将其声明为数组,逐个初始化它。 试试这个,

私人最终的DateFormat []格式 formats = new DateFormat [3]; formats [0] = new SimpleDateFormat(getString(R.string.date_format),Locale.ENGLISH);

删除循环只是使用 formats = new DateFormat;     formats = new SimpleDateFormat(String.valueOf(R.string.date_format),Locale.ENGLISH);     final TimeZone timeZone = TimeZone.getTimeZone(“Zulu”); formats.setTimeZone(的timeZone);