Мое приложение не может проанализировать ответ API REST из-за формата отметки времени.REST API возвращает JSON:
{
"id": 4,
"username": "test555",
"email": "test555@test.com",
"password": "pass",
"role": "USER",
"enabled": 1,
"lastPassChange": null,
"created": [2019, 6, 16, 19, 8, 34, 843438000]
}
Но мое приложение выдает исключение, потому что оно ожидает объект, но получает массив.
Я добавил реализацию 'com.fatboyindustrial.gson-jodatime-serialisers:gson-jodatime-serialisers:1.7.0'
и добавил вмой gson singleton:
public class GsonSingleton {
private static GsonSingleton sInstace;
private Gson gson;
public static synchronized GsonSingleton getInstance(){
if(sInstace == null){
sInstace = new GsonSingleton();
}
return sInstace;
}
private GsonSingleton(){
this.gson = Converters.registerLocalDateTime(new GsonBuilder()).create();
}
public Gson gson(){
return this.gson;
}
public JSONObject obj2Json(Object o) throws JSONException{
return new JSONObject(gson.toJson(o));
}
}
но это не помогает.
Строка, в которой возникают исключения:
User savedUser = GsonSingleton.getInstance().gson().fromJson(response.toString(), User.class);
Стек исключений:
`com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 191 path $.created
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.google.gson.Gson.fromJson(Gson.java:813)
at eu.blubit.autobook.view.AccountFormActivity$1.onResponse(AccountFormActivity.java:153)
at eu.blubit.autobook.view.AccountFormActivity$1.onResponse(AccountFormActivity.java:148)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6816)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 191 path $.created
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.google.gson.Gson.fromJson(Gson.java:813)
at eu.blubit.autobook.view.AccountFormActivity$1.onResponse(AccountFormActivity.java:153)
at eu.blubit.autobook.view.AccountFormActivity$1.onResponse(AccountFormActivity.java:148)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6816)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)`
Но я должен получить объект User.class:
@Entity
public class User {
@PrimaryKey
@NonNull
private Long id;
@Size(min=3, max=20)
private String username;
private String email;
@Size(min=6)
private String password;
private String role;
private Integer enabled;
private LocalDateTime lastPassChange;
private LocalDateTime created;
//setters and getters