2016-11-11 3 views
2

Ich habe zwei Datumsformate, die von Server Json sind. JJJJ-MM-TT'T'HH: mm: ss und JJJJ-MM-TT sind meine Datumsformate.Gson Konvertierung nach Json mit zwei Datumsformat funktioniert nicht

Also habe ich versucht, diese Json zu Gson mit folgenden Codes zu konvertieren.

GsonBuilder gsonBuilder = new GsonBuilder().registerTypeAdapter(Date.class, new DateDeserializer()); 
Gson gson = gsonBuilder.create(); 

Das sind meine Datumsformate,

private static final String[] DATE_FORMATS = new String[] { 
      "yyyy-MM-dd'T'HH:mm:ss", 
      "yyyy-MM-dd" 
}; 

private class DateDeserializer implements JsonDeserializer<Date> { 

    @Override 
    public Date deserialize(JsonElement jsonElement, Type typeOF, 
           JsonDeserializationContext context) throws JsonParseException { 
      for (String format : DATE_FORMATS) { 
       try { 
        return new SimpleDateFormat(format, Locale.US).parse(jsonElement.getAsString()); 
       } catch (ParseException e) { 
       } 
      } 
      throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString() 
        + "\". Supported formats: " + Arrays.toString(DATE_FORMATS)); 
     }  

} 

aktualisieren

Das ist mein Json Objekt,

{ 
    "idpatient": 56, 
    "diabetesType": null, 
    "language": null, 
    "customId": "CUS790", 
    "diabetesOther": null, 
    "firstName": "Niro", 
    "lastName": "Wije", 
    "email": "[email protected]", 
    "dob": "1989-10-11", 
    "parentEmail": null, 
    "gender": "male", 
    "diagnosedDate": "2016-11-11", 
    "height": 0, 
    "weight": 0, 
    "heightUnit": null, 
    "weightUnit": null, 
    "theme": "Lite", 
    "userName": "weera", 
    "password": "asdf9999", 
    "dateCreated": 1478880594000, 
    "lastUpdated": 1478880594000 
} 

Dann ein Json-Objekt Gson zu konvertieren Ich habe versucht, Objekt mit diesem. Ich habe folgendes Fehlerprotokoll erhalten.

11-11 16:11:17.735 28072-28072/my.api.example W/System.err: com.google.gson.JsonParseException: Unparseable date: "1478880594000". Supported formats: [yyyy-MM-dd'T'HH:mm:ss, yyyy-MM-dd] 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at my.api.example.activities.LoginActivity$DateDeserializer.deserialize(LoginActivity.java:180) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at my.api.example.activities.LoginActivity$DateDeserializer.deserialize(LoginActivity.java:168) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.google.gson.Gson.fromJson(Gson.java:810) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.google.gson.Gson.fromJson(Gson.java:775) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:36) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:24) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at retrofit.OkHttpCall.parseResponse(OkHttpCall.java:148) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at retrofit.OkHttpCall.access$100(OkHttpCall.java:29) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at retrofit.OkHttpCall$1.onResponse(OkHttpCall.java:94) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:168) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:  at java.lang.Thread.run(Thread.java:841) 
11-11 16:11:17.755 28072-28072/my.api.example D/LOGIN_ACTIVITY: ERROR_MESSAGE Unparseable date: "1478880594000". Supported formats: [yyyy-MM-dd'T'HH:mm:ss, yyyy-MM-dd] 

Es bedeutet, dass diese Methode nicht für meine Datumsformate funktioniert. Wie könnte ich mit dieser Ausnahme umgehen?

Haben Sie irgendwelche Ideen?

+0

Konvertieren Sie jsonElement.getAsString() zu einem formatierten Datum wie zuerst registriert –

+1

paste json hier zum besseren Verständnis. – Satendra

+0

@satendra: Bitte sehen Sie sich den aktualisierten Beitrag an. – Barrier

Antwort

0

Aus den Protokollen kann ich sehen, dass Sie java.util.Date nicht übergeben, aber ein Zeitstempel (lang) und Sie registrieren Typ Adapter für java.util.Date Klasse.

1

Nach dem Fehler, den Sie freigegeben haben, gibt der Server das Datum in Millisekunden und nicht das Format, das Sie erwartet.

com.google.gson.JsonParseException: Nicht übertragbares Datum: "1478880594000". Unterstützte Formate: [JJJJ-MM-TT'T'HH: MM: SS, JJJJ-MM-TT].

Zuerst müssen Sie zu Datum konvertieren, dann formatieren Sie gemäß Ihrer Anforderung.

1

Update diese Linie

return new SimpleDateFormat(format, Locale.US).format(new Date(jsonElement)); 

Hoffnung dies funktionieren wird.

+0

Ich werde versuchen, Sie wissen zu lassen. – Barrier