2016-10-26 5 views
0

곧 출시 될 API의 일부로 Android 환경에서 더 잘 사용되도록 다음 코드를 변경하려고합니다.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이다.

내가 뭘 잘못하고 있니?

편집 : 내가 프로젝트를 빌드 할 수없는 나는, 그래서 내가 게시물에 두 번째 코드 블록을 바꾼 --stacktrace --debug

반영 당겨 수 없습니다 @trooper

내 현재 코드. 나는 바꿨다.

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 용 자바로 작성된 현재 GitHib APIv3을 Android GitHub API v3으로 변환하는 것입니다. v2를 다루지 않아도됩니다.

이 편집이 답변을 드릴 수있는 충분한 정보가되기를 바랍니다.

+0

오류가 무엇인지 알려주지 않았습니다. 질문을 수정하고 스택 추적을 추가하십시오. – trooper

+0

@trooper 저는 현재 집에있을 때 제 질문을 편집해야합니다. Android Studio에서 스택 트레이스를 찾는 방법은 무엇입니까? – Sc4ryb3ar

답변

0

형식이 배열로 선언되지 않았습니다. 이 배열을 하나씩 초기화해야합니다. 시도해보십시오.

개인 최종 DateFormat [] 형식 formats = new DateFormat [3]; formats [0] = 새로운 SimpleDateFormat (getString (R.string.date_format), Locale.ENGLISH);

루프를 제거하려면 형식 = 새 DateFormat; formats = 새로운 SimpleDateFormat (String.valueOf (R.string.date_format), Locale.ENGLISH); final TimeZone timeZone = TimeZone.getTimeZone ("Zulu"); formats.setTimeZone (timeZone);

관련 문제