У меня проблема в Android-проекте, который я разрабатываю. Я хочу сохранить массивList, называемый arrayVersion объектов, называемых «Version» в файле, чтобы загрузить его при запуске моего MainActivity. Поля возвращенного объекта не имеют одинаковых значений по сравнению с объектом, который я отправляю.Проблема загрузки arrayList Android
Вот код метода
public void save(){
if (arrayVersion.size()!=0){
ObjectOutput out = null;
try {
Log.d("save", "save");
out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+File.separator+"Version.log"));
Log.d("save", ""+arrayVersion.get(0).getLevel()); //Writes 6 for instance
out.writeObject(arrayVersion);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
сохранить() я ставлю в LogCat уровень моей версии.
Вот код моего метода загрузки
private void load() {
//Initialisation of my arrayList
if(arrayVersion.size()==0){
for (int j = 0; j <= nbVersions; j++) {
MainActivity.arrayVersion.add(Version.getVersion(j));
}
}
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream(new File(new File(getFilesDir(),"")+File.separator+"Version.log")));
arrayVersion = (ArrayList<Version>) is.readObject();
Log.d("load", "load"+arrayVersion.size()); //Writes the good size
Log.d("load", ""+arrayVersion.get(0).getName());//writes the good name
Log.d("load", ""+arrayVersion.get(0).getLevel());//writes 0 everytime
is.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Когда я перезагрузить мое приложение, то arrayVersion.size() возвращает правильный размер и хорошие элементы (версии с разными именами), но уровень поля всегда на 0.
вот код моей версии класса.
Версия общественного класс реализует Serializable {
/**
*
*/
private static final long serialVersionUID = 8733931469883869946L;
protected static int level;
protected static double price;
protected static double ups;
protected String name;
protected int upsTag;
protected int priceTag;
protected int levelTag;
protected static int index;
protected double modifier;
protected double DEFAULT_UPS;
public Version() {
}
public int getIndex() {
//
return index;
}
public double getUps() {
//
return ups;
}
public double getPrice() {
//
return price;
}
public void upgrade() {
price*=1.10;
level++;
Log.d("upgrade","niveau" + level);
}
public void calcUps() {
//
}
public int getLevel() {
//
return level;
}
public int getUpsTag() {
//
return upsTag;
}
public int getPriceTag() {
//
return priceTag;
}
public int getLevelTag() {
//
return levelTag;
}
public String getName() {
//
return name;
}
public static Version getVersion(int index) {
Version version = null;
if(index == 0)
version = Alpha.getAlpha();
if (index == 1)
version = Beta.getBeta();
if (index == 2)
version = ApplePie.getApplePie();
if (index == 3)
version = BananaBread.getBananaBread();
if (index == 4)
version = Cupcake.getCupcake();
if (index == 5)
version = Donut.getDonut();
if (index == 6)
version = Eclair.getEclair();
return version;
}
public void upgrade(int index) {
}
}
А вот код моего класса Альфа, который простирается Версия
общественного класса Альфа расширяет Версия {
/**
*
*/
private static final long serialVersionUID = -4246008928649558154L;
private String name = "alpha";
private static Alpha alpha;
Alpha() {
modifier = 1;
level = 0;
price=10;
DEFAULT_UPS=0.1;
ups=0;
index = 0;
upsTag = R.id.AlphaUps;
priceTag = R.id.AlphaPrice;
levelTag = R.id.AlphaLevel;
}
public static Alpha getAlpha() {
if (alpha==null)
alpha = new Alpha();
return alpha;
}
public void upgrade()
{
price*=1.10;
level++;
Log.d("upgrade","niveau" + level);
if (level==10){UpgradesActivity.setTag(21);}
if (level==25){UpgradesActivity.setTag(22);}
if (level==50){UpgradesActivity.setTag(23);}
if (level==100){UpgradesActivity.setTag(24);}
if (level==150){UpgradesActivity.setTag(25);}
if (level==200){UpgradesActivity.setTag(26);}
if (level==250){UpgradesActivity.setTag(27);}
}
public int getIndex() {
return index;
}
public int getLevel() {
return level;
}
public double getPrice() {
return price;
}
public void calcUps() {
ups = level*DEFAULT_UPS*modifier;
Log.d("alpha", String.valueOf(ups));
}
public double getUps() {
return ups;
}
public String getName()
{
return name;
}
public void upgrade (int index){
if (index ==21){modifier *= 2;calcUps();}
if (index ==22){modifier *= 2;calcUps();}
if (index ==23){modifier *= 2;calcUps();}
if (index ==24){modifier *= 2;calcUps();}
if (index ==25){modifier *= 2;calcUps();}
if (index ==26){modifier *= 2;calcUps();}
if (index ==27){modifier *= 2;calcUps();}
}
}
Надеюсь, этого достаточно, чтобы вы мне помогли, и если что вы не понимаете, не стесняйтесь спрашивать меня.
Примечание: это моя первая когда-либо постить я действительно начиная с Android Программирование
Edit: мой LogCat является на следующие:
10-20 23:01:22.099: D/stack(23782): before load :alpha &0
10-20 23:01:22.099: D/stack(23782): before load :beta &0
10-20 23:01:22.099: D/stack(23782): before load :apple pie &0
10-20 23:01:22.099: D/stack(23782): before load :bananaBread &0
10-20 23:01:22.099: D/stack(23782): before load :cupcake &0
10-20 23:01:22.099: D/stack(23782): before load :donut &0
10-20 23:01:22.099: D/stack(23782): before load :eclair &0
10-20 23:01:22.149: D/stack(23782): after load :alpha &0
10-20 23:01:46.213: D/stack(23782): before save :alpha &12
10-20 23:01:46.293: D/stack(23782): after save : alpha &12
10-20 23:02:08.555: D/stack(23782): before save :alpha &12
10-20 23:02:08.595: D/stack(23782): after save : alpha &12
10-20 23:02:28.904: D/stack(23782): before save :alpha &12
10-20 23:02:28.904: D/stack(23782): before save :beta &7
10-20 23:02:28.954: D/stack(23782): after save : alpha &12
10-20 23:02:28.954: D/stack(23782): after save : beta &7
Слишком много пояснений и кодовых блоков. Пожалуйста, уточните свой вопрос. – gokhanakkurt
Я хотел бы знать, почему значения, которые я читаю в моем ArrayList, не такие, как тот, который я пишу (методы сохранения и загрузки) –
Можете ли вы записывать свои значения перед сохранением, после сохранения, перед загрузкой и после загрузки? Я подозреваю, что проблема связана с тем, как вы сохраняете или как вы читаете нагрузку. – erad