2014-10-20 3 views
0

У меня проблема в 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 
+0

Слишком много пояснений и кодовых блоков. Пожалуйста, уточните свой вопрос. – gokhanakkurt

+0

Я хотел бы знать, почему значения, которые я читаю в моем ArrayList, не такие, как тот, который я пишу (методы сохранения и загрузки) –

+0

Можете ли вы записывать свои значения перед сохранением, после сохранения, перед загрузкой и после загрузки? Я подозреваю, что проблема связана с тем, как вы сохраняете или как вы читаете нагрузку. – erad

ответ

0

Проблема решена: Статические поля в моем классе Версия не записывалась в массив, который я пытался сохранить и загрузить.

Не ставьте статическое поле в сериализуемый класс.