Opracowuję aplikację na Androida, która wyświetla okna dialogowe z niektórymi usługami sieciowymi Google App Engine.Jak naprawić niedokładne DateTime (minuty) analizowane w bibliotekach Jackson/Gson?
Ta aplikacja implementuje działanie na czacie, które ma bardzo prostą funkcję: wysłać tekst.
Podczas debugowania zauważyłem, że wiadomości, które wymieniłem na serwerze, nie były wyświetlane w tej samej kolejności, w jakiej wysłałem je w mojej aplikacji. Moją pierwszą myślą było, że problem pochodzi z serwera.
Początkowo sprawdziłem surowego JSON ja otrzymywał:
{
"messages": [
{
"message": "test 3",
"author": "daniel",
"message_id": "5724160613416960",
"sent_at": "2014-11-13T09:42:42.861950"
},
{
"message": "test 2",
"author": "daniel",
"message_id": "5649050225344512",
"sent_at": "2014-11-13T09:42:10.390960"
},
{
"message": "test 1",
"author": "daniel",
"message_id": "5178081291534336",
"sent_at": "2014-11-13T09:41:01.998830"
}
],
"kind": "company#chatsItem",
"etag": "\"RUCkC9XynEQNZ2t5E0aa41edXro/xRNtgkWIUbq4zCgmv2iq2fy-UIg\""
}
Jak widać, dane surowe jest prawidłowo uporządkowane. Ale nadchodzi zabawna część. Kiedy dodać parsera JSON, takich jak JacksonFactory (lub nawet GsonFactory):
Company.Builder builder = new Company.Builder(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null);
Company service = builder.build();
ChatsChatCollectionResponse response = service.chats().list(user_id, album_id, token).execute();
List<ChatsChatResponse> messagesResponse = response.getMessages();
Oto ChatsChatResponse
przedmioty zamówione w taki sam sposób jak powyżej:
[0] = {[email protected]6} size = 4
[0] = {[email protected]}"author" -> "daniel"
[1] = {[email protected]}"message" -> "test 3"
[2] = {[email protected]}"message_id" -> "5724160613416960"
[3] = {[email protected]}"sent_at" -> "2014-11-13T10:57:03.950+01:00"
[1] = {[email protected]6} size = 4
[0] = {[email protected]}"author" -> "daniel"
[1] = {[email protected]}"message" -> "test 2"
[2] = {[email protected]}"message_id" -> "5649050225344512"
[3] = {[email protected]}"sent_at" -> "2014-11-13T10:48:40.960+01:00"
[2] = {[email protected]8} size = 4
[0] = {[email protected]}"author" -> "daniel"
[1] = {[email protected]}"message" -> "test 1"
[2] = {[email protected]}"message_id" -> "5178081291534336"
[3] = {[email protected]}"sent_at" -> "2014-11-13T10:57:39.830+01:00"
dlaczego jest taki przypadkowy różnica w polu "sent_at"?
EDIT Zapomniałam wspomnieć, że ja nie mówię o przesunięciu 1 godzinę, która odpowiada czasowej, ale raczej o tym, jak są losowo minuty.
mógłbyś zawierać definicję POJO dla 'ChatsChatResponse'? Ważne jest, aby wiedzieć, jakie typy danych są używane. Wygląda na to, że używasz deserializera opartego na Jackson, więc wersja Jacksona może również mieć znaczenie: możesz chcieć zweryfikować, używając również najnowszej wersji poprawki. – StaxMan