У меня есть POJO в Android, который без каких-либо проблем сериализуется из ответа JSON сервера с GSON.
public ExampleClass implements Serializable {
@Expose
String someProperty;
}
По какой-то причине я хотел бы сохранить объект Handler в своем классе, например:
public ExampleClass implements Serializable {
private Handler handler = new Handler();
@Expose
String someProperty;
}
После добавления этой дополнительной строки сериализация разрывается с
java.lang.RuntimeException: Failed to invoke public com.example.android.ExampleClass() with no args
Я пытался добавить конструктор без аргументов для моего класса, но безуспешно.Я пытался сделать объект Handler временным, но все равно безуспешно.
ОБНОВЛЕНИЕ:
Итак, я нашел решение.Проблема здесь заключается в том, что объект Handler инициализируется до завершения сериализации объекта.
Так что это не нарушает сериализацию:
public ExampleClass implements Serializable {
private Handler handler;
@Expose
String someProperty;
}
Но где его инициализировать?Если я попытаюсь сделать это в конструкторе no-args, сериализация снова прекратится:
public ExampleClass implements Serializable {
private Handler handler;
@Expose
String someProperty;
public ExampleClass() {
handler = new Handler(); // breaks serialization
}
}
Если я инициализирую его позже, когда закончится сериализация, он будет работать:
public ExampleClass implements Serializable {
private Handler handler;
@Expose
String someProperty;
public void functionCalledInTheFuture() {
handler = new Handler(); // works
}
}
IЯ не совсем понимаю, поэтому, если кто-то может мне это объяснить, пожалуйста, не стесняйтесь!:)