2016-10-26 34 views
0

我試圖更改以下代碼,以便在Android環境中更好地用作即將到來的API的一部分。在Android Studio中,我收到了Java.text.DateFormat的錯誤

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); 

to;

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

並糾正了我的第一個問題。

所以,現在回答我的下一個問題。正如你所看到的,我正在從第一塊中的數組移動到第二塊中的單個實例。行

for (DateFormat format : formats) 

的「格式被拋」的foreach並不適用於java.text.DateFormat中的」

我知道的foreach在陣列中使用,我不知道是怎麼刪除循環的一部分,並實現我所需要的......這是我真正迷失的地方。

我的最終目標是將當前支持API v2 & v3的Eclipse Studio的Java編寫的GitHib APIv3轉換爲Android GitHub API v3,因爲我們不需要覆蓋v2。

我希望這個編輯是足夠的信息能夠回答。

+0

你沒有告訴我們錯誤是什麼。請編輯您的問題並添加堆棧跟蹤。 – trooper

+0

@trooper我現在在做我的日常工作,當我回家時,我將不得不編輯我的問題。而且我很新,在Android Studio中如何查找/獲取堆棧跟蹤? – Sc4ryb3ar

回答

0

格式未聲明爲數組。您需要將其聲明爲一個數組並逐個初始化它。 試試這個,

private final DateFormat [] formats 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);

相關問題