2016-08-24 6 views
0

В моей Android приложения, у меня есть список пользовательских объектовПроблемы записи и чтения ArrayList <Object> с FileStream в Java

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 = {"..","..",".."}; 
+0

ли пользовательские классы 'реализует Serializable'? – Zircon

+0

@ Zircon они реализуют мой интерфейс –

+0

Но они не реализуют Serializable. Вам нужно будет это сделать. К сожалению, это не всегда самая простая вещь. Я рекомендую вам подобрать книгу «Эффективное Java: второе издание» Джошуа Блоха и прочитать его главу о правильной реализации интерфейса Serializable. После того, как вы правильно выполнили Serializable, чтение/запись ваших объектов в файловой системе будет ветерок. – nasukkin

ответ

1

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

Спасибо, Nghia

+0

Ошибок сохранения и загрузки не существует. Он просто терпит неудачу, так как in, pcList имеет значение null даже после загрузки. Я не могу реализовать Serializable в своем классе BasicPoke, потому что он уже реализует мой интерфейс Poke. –

+0

Редактировать: у меня создалось впечатление, что у меня может быть только один «инвентарь» в моих пользовательских классах. У моего класса уже есть «реализует Poke», который является моим пользовательским интерфейсом. Я изменил это на «реализует Poke, Serializable», и он работает! Благодаря! –