Объекты в списке массивов также похожи после загрузки. Почему? - PullRequest
2 голосов
/ 24 января 2020

Моя программа - простой чат. Значения записываются от пользователя с помощью текстового поля в разделе регистрации и создает учетную запись. У меня есть класс с именем «Account», который принимает одинаковые значения на входе и содержит те же поля. Все учетные записи должны быть сохранены и загружены для последующей реализации. Я использовал код ниже (это часть кода программы), но есть проблема. Я напечатал значения после загрузки и обнаружил, что он сообщает нулевые значения. Затем после добавления новой учетной записи в список массивов все значения в списке были изменены на добавленные значения. Например, я создаю и сохраняю учетную запись с именем «а» и адрес электронной почты «а», затем снова запускаю программу. При добавлении учетной записи с именем и адресом электронной почты "B" здесь печатаются две учетные записи B. В чем проблема?

String email= t4.getText();
String password=t5.getText();
String name=t1.getText();
String family=t2.getText();
String phoneNumber=t3.getText();
try {
    FileInputStream f = new FileInputStream("accounts.txt");
    ObjectInputStream obj = new ObjectInputStream(f);
    int size=obj.readInt();
    for (int i = 0; i <size ; i++) {
        accounts.add((Account)obj.readObject());
    }
} catch (Exception e){
    e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
    System.out.println(accounts.get(i).name+"  "+accounts.get(i).email);
}
Account account = new Account(name,family,phoneNumber,email,password);
accounts.add(account);
try{
    FileOutputStream f=new FileOutputStream("accounts.txt",false);
    ObjectOutputStream obj=new ObjectOutputStream(f);
    obj.writeInt(accounts.size());
    for (Account a:accounts) {
        obj.writeObject(a);
    }
} catch (Exception e){
     e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
    System.out.println(accounts.get(i).name+"  "+accounts.get(i).email);
}
//class account
class Account implements Serializable {
    static String name, family, phoneNumber, email, password;
    static ArrayList<Post> posts = new ArrayList();
    static ArrayList<Account> following = new ArrayList();
    static ArrayList<Account> follower = new ArrayList();

    Account(String n, String f, String pn, String e, String ps) {
        name = n;
        family = f;
        phoneNumber = pn;
        email = e;
        password = ps;
    }

    void follow(Account user) {
        following.add(user);
        user.follower.add(this);
    }

    void post(String data) {
        Post post = new Post(data, new Date(), this);
        posts.add(post);
        for (Account account : follower) {
            account.posts.add(post);
        }
    }
}

1 Ответ

1 голос
/ 24 января 2020

Все члены класса Account имеют значение static, что означает, что они принадлежат к классу вместо указанного c экземпляра . Сделайте их нестати c, и вы должны быть хороши к go.

...