标题可能有点令人困惑甚至误导,但我试图将一个对象保存到磁盘,该对象作为属性包含对象列表(ArrayList)。
事情就是这个对象在没有列表的情况下无法做任何事情。
我尝试过对象和列表的序列化。当我尝试单独序列化对象时,其中没有任何内容,列表是空的。当我尝试序列化列表时,我可以访问列表,更改它但是以许多抛出异常为代价。
public class AdressBook implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6399534374362987383L;
static Reader reader = new KeyboardReader();
static ArrayList<Contact> AdressBook = new ArrayList<Contact>();
public AdressBook(){
}
public static void AddContact(){
AdressBook.add(new Contact());
}
public static void EditContact(){
System.out.println("Which contact you desire to edit?");
Libreta.Display();
System.out.println("Type in the number of the contact.");
int i = (reader.readint() - 1);
System.out.println("Choose the change 1.Name 2.Last Name 3.Nickname 4.Phone number 5.Emails");
int j = reader.readint();
switch(j){
case 1: AdressBook.get(i).setName();
break;
case 2: AdressBook.get(i).setLastName();
break;
case 3: AdressBook.get(i).setNick();
break;
case 4: AdressBook.get(i).AddPhoneNumber();
break;
case 5: AdressBook.get(i).AddEmail();
break;
default : System.out.println("Not a valid option");
}
我必须能够编辑对象列表并能够以某种方式再次保存它。我一直在尝试很多方法,但我缺乏知识,或者它对我不起作用。
答案 0 :(得分:0)
您的地址簿变量不应声明为静态,因为静态变量未序列化。使它成为一个实例(非静态)变量,如下所示:
public class AddressBook implements Serializable {
...
ArrayList<Contact> contacts = new ArrayList<Contact>();
...
}
答案 1 :(得分:0)
我认为你的问题是你的ArrayList是一个静态字段(有时称为类字段),序列化发生在不在类中的对象实例中。
所以你应该替换你的静态字段和静态方法,例如等价物。
(现在,只是评论:你应该尝试使用java命名约定 - 使用较低的字段和方法名称首字母 - java编码员很容易理解你......; - )