Проблемы с записью и чтением ArrayList‹Object› с файловым потоком в Java

В моем приложении для Android у меня есть список пользовательских объектов

ArrayList<Poke> pcList = new ArrayList<>();

Позже в моем коде у меня есть методы сохранения и загрузки, которые используют Java OOS и OIS для работы. Я использовал именно эти методы в других проектах и ​​знаю, что они работают правильно.

Я считаю, что у меня проблема с сохранением и загрузкой списка пользовательских объектов.

Вот строки, которые я призываю сохранить, а также загрузить свой список.

// save
oos.writeObject(pcList);

...

// load
pcList = (ArrayList<Poke>)ois.readObject();

Любые идеи, почему я не могу правильно загрузить/сохранить свой список пользовательских объектов?

Вот интерфейс, который связывает несколько похожих объектов:

public interface Poke {

    int getNum();

    String getName();

    String getType();

    int getValue();

    boolean getShiny();

    String getImageName();

}

Вот один из похожих классов объектов

public class BasicPoke implements Poke {

boolean shiny = false;

Random randomInt = new Random();
int iRandom = randomInt.nextInt(34 - 1) + 1;
int iShiny = randomInt.nextInt(31 - 1) + 1;

public int getNum(){
    return this.iRandom;
}

public String getName(){
    return this.pokeNames[iRandom-1];
}

public String getType(){
    return this.pokeTypes[iRandom-1];
}

public int getValue(){
    return 1;
}

public boolean getShiny() {
    return (iShiny == 15);
}

public String getImageName() {
    String threeDigitInteger = String.format(Locale.getDefault(),"%03d",    this.getNum());
    return (this.getShiny()) ? "icon"+threeDigitInteger+"s" : "icon"+threeDigitInteger;
}

String pokeNames = {"..","..",".."};
String pokeTypes = {"..","..",".."};

person Josh Beckwith    schedule 24.08.2016    source источник
comment
Ваши пользовательские классы implements Serializable?   -  person Zircon    schedule 24.08.2016
comment
@Zircon, они реализуют мой интерфейс   -  person Josh Beckwith    schedule 24.08.2016
comment
Но они не реализуют Serializable. Вам нужно будет это сделать. К сожалению, это не всегда самое простое. Я рекомендую вам взять книгу Джошуа Блоха «Эффективная Java: второе издание» и прочитать его главу о правильной реализации интерфейса Serializable. После того, как вы правильно реализовали Serializable, чтение/запись ваших объектов в файловой системе станет легкой задачей.   -  person nasukkin    schedule 24.08.2016


Ответы (1)


Пожалуйста, реализуйте Serializable для класса BasicPoke. И, кстати, не могли бы вы рассказать нам, какая проблема (исключение) при загрузке/сохранении списка объектов?

Спасибо, Нгиа

person Nghia Do    schedule 24.08.2016
comment
Ошибок сохранения и загрузки нет. Он просто молча терпит неудачу, например, pcList имеет значение null даже после загрузки. Я не могу реализовать Serializable в своем классе BasicPoke, потому что он уже реализует мой интерфейс Poke. - person Josh Beckwith; 24.08.2016
comment
Изменить: у меня сложилось впечатление, что в моих пользовательских классах может быть только одна реализация. В моем классе уже есть реализация Poke, которая является моим пользовательским интерфейсом. Я изменил это на, реализует Poke, Serializable, и это работает! Спасибо! - person Josh Beckwith; 24.08.2016