我在 Android 中有一个 POJO,它是使用 GSON 从服务器的 JSON 响应序列化的,没有任何问题。
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
}
}
我不完全理解这一点,所以如果有人可以向我解释,请不要犹豫!:)
叮当猫咪
相关分类