Android 是否使用Serializable在onSaveInstanceState中保存对象引用?
我需要澄清如何保存对另一个对象有引用的对象的状态 假设我有以下需要保存和恢复的类对象:Android 是否使用Serializable在onSaveInstanceState中保存对象引用?,android,serializable,Android,Serializable,我需要澄清如何保存对另一个对象有引用的对象的状态 假设我有以下需要保存和恢复的类对象: public class ObjectA implements Serializable{ private List<ObjectB> mObjectBList; } public clas ObjectB implements Serializable { // some other members here private ObjectA mParent; } 问题
public class ObjectA implements Serializable{
private List<ObjectB> mObjectBList;
}
public clas ObjectB implements Serializable {
// some other members here
private ObjectA mParent;
}
问题:
列表
不可序列化
。例如,将List
更改为ArrayList
public class MainActivity extends AppCompatActivity {
private ObjectA mObjectA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
mObjectA = (ObjectA) savedInstanceState.getSerializable("ObjectA");
// check mObjectA == mObjectA.getObjectBList().get(0).getParent();
} else {
mObjectA = new ObjectA();
ArrayList<ObjectB> list = new ArrayList<>();
list.add(createB());
list.add(createB());
list.add(createB());
list.add(createB());
list.add(createB());
mObjectA.setObjectBList(list);
}
}
private ObjectB createB() {
ObjectB objectB = new ObjectB();
objectB.setParent(mObjectA);
return objectB;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("ObjectA", mObjectA);
}
}
public class ObjectA implements Serializable {
private ArrayList<ObjectB> mObjectBList;
public void setObjectBList(ArrayList<ObjectB> objectBList) {
mObjectBList = objectBList;
}
public ArrayList<ObjectB> getObjectBList() {
return mObjectBList;
}
}
public class ObjectB implements Serializable {
// some other members here
private ObjectA mParent;
public void setParent(ObjectA parent) {
mParent = parent;
}
public ObjectA getParent() {
return mParent;
}
}
public类MainActivity扩展了AppCompatActivity{
私人目标a mObjectA;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(savedInstanceState!=null){
mObjectA=(ObjectA)savedInstanceState.getSerializable(“ObjectA”);
//检查mObjectA==mObjectA.getObjectBList().get(0.getParent();
}否则{
mObjectA=新对象a();
ArrayList=新建ArrayList();
添加(createB());
添加(createB());
添加(createB());
添加(createB());
添加(createB());
mObjectA.setObjectBList(列表);
}
}
私有对象b createB(){
ObjectB ObjectB=新的ObjectB();
objectB.setParent(mObjectA);
返回对象b;
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putSerializable(“ObjectA”,mObjectA);
}
}
公共类ObjectA实现可序列化{
私有数组列表mObjectBList;
public void setObjectBList(ArrayList objectBList){
mObjectBList=objectBList;
}
公共阵列列表getObjectBList(){
返回mObjectBList;
}
}
公共类ObjectB实现了可序列化{
//这里还有其他一些成员
私人反对权;
public void setParent(ObjectA parent){
mParent=父母;
}
public ObjectA getParent(){
归还租金;
}
}
列表
不可序列化
。例如,将List
更改为ArrayList
public class MainActivity extends AppCompatActivity {
private ObjectA mObjectA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
mObjectA = (ObjectA) savedInstanceState.getSerializable("ObjectA");
// check mObjectA == mObjectA.getObjectBList().get(0).getParent();
} else {
mObjectA = new ObjectA();
ArrayList<ObjectB> list = new ArrayList<>();
list.add(createB());
list.add(createB());
list.add(createB());
list.add(createB());
list.add(createB());
mObjectA.setObjectBList(list);
}
}
private ObjectB createB() {
ObjectB objectB = new ObjectB();
objectB.setParent(mObjectA);
return objectB;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("ObjectA", mObjectA);
}
}
public class ObjectA implements Serializable {
private ArrayList<ObjectB> mObjectBList;
public void setObjectBList(ArrayList<ObjectB> objectBList) {
mObjectBList = objectBList;
}
public ArrayList<ObjectB> getObjectBList() {
return mObjectBList;
}
}
public class ObjectB implements Serializable {
// some other members here
private ObjectA mParent;
public void setParent(ObjectA parent) {
mParent = parent;
}
public ObjectA getParent() {
return mParent;
}
}
public类MainActivity扩展了AppCompatActivity{
私人目标a mObjectA;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(savedInstanceState!=null){
mObjectA=(ObjectA)savedInstanceState.getSerializable(“ObjectA”);
//检查mObjectA==mObjectA.getObjectBList().get(0.getParent();
}否则{
mObjectA=新对象a();
ArrayList=新建ArrayList();
添加(createB());
添加(createB());
添加(createB());
添加(createB());
添加(createB());
mObjectA.setObjectBList(列表);
}
}
私有对象b createB(){
ObjectB ObjectB=新的ObjectB();
objectB.setParent(mObjectA);
返回对象b;
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putSerializable(“ObjectA”,mObjectA);
}
}
公共类ObjectA实现可序列化{
私有数组列表mObjectBList;
public void setObjectBList(ArrayList objectBList){
mObjectBList=objectBList;
}
公共阵列列表getObjectBList(){
返回mObjectBList;
}
}
公共类ObjectB实现了可序列化{
//这里还有其他一些成员
私人反对权;
public void setParent(ObjectA parent){
mParent=父母;
}
public ObjectA getParent(){
归还租金;
}
}