Tablica Obiektow - serializacja

0

Witam, nie wiem gdzie zrobiłem błąd kompilator nie wyrzuca żadnych błędów, po zapisaniu do pliku i odczytaniu wszystko wygląda okey, tyle że gdy chce wyświetlić zawartość tablicy po odczytaniu nic w konsoli się nie wyświetla.

-Klasa Rachunek przechowuje tablice produktów (Klasa Produkty(String, Float, Int)).
-Metoda isEmpty() sprawdza czy tablica jest pusta
-Metoda isFull() sprawdza czy tablica jest pełna (z góry ustalone max na 15)

Po wypelnieniu calej tablicy
Dane zostaly zapisane do baza.dat
Po zresetowaniu programu i próbie odczytania z pliku

false
true
Dane zostaly odczytane z baza.dat 

Powyżej powinna zostać wyświetlona zawartość tablicy, a tak się nie dzieje

Zawartość metod

	
public class Rachunek implements Serializable {

	private static final long serialVersionUID = 1L;
	static final int rozmiarTablicy = 15;
	private int ileProduktow = 0;

	private Produkty[] kartoteka = new Produkty[rozmiarTablicy + 1];

	public boolean isEmpty() {
		if (ileProduktow == 0)
			return true;
		return false;
	}

	public boolean isFull() {
		if (ileProduktow == rozmiarTablicy)
			return true;
		return false;
	}
      
	public String drukujRachunek() {
		String rachunek = "       PARAGON FISKALNY \n"
				+ "_______________________________\n"
				+ "Nazwa           Cena    Strony\n"
				+ "_______________________________\n";
		float suma = 0, sumaVat = 0;

		for (int i = 0; i < ileProduktow; i++) {
			suma += kartoteka[i].obliczWartoscBrutto();
			sumaVat += kartoteka[i].obliczWartoscNetto();
			rachunek += "\n" + kartoteka[i].drukujListe();
		}
		rachunek += "\n";

		rachunek += String.format("\n Cena netto: %.2f", sumaVat);
		rachunek += String.format("\n Vat: %.2f", suma - sumaVat);
		rachunek += String.format("\n DO ZAPLATY: %.2f", suma);

		return rachunek;
	}
            ...           
            ... 
            ...         
      
    public void SerializeArray() {
		try {
			ObjectOutputStream out = new ObjectOutputStream(
					new FileOutputStream("baza.dat"));
			out.writeObject(this);
			out.close();
			System.out.printf("Dane zostaly zapisane do baza.dat");
		} catch (IOException i) {
			i.printStackTrace();
		}
	}

	public void DeserializeArray() {

		try {
			FileInputStream fileIn = new FileInputStream("baza.dat");
			ObjectInputStream in = new ObjectInputStream(fileIn);

			Rachunek rachunek = new Rachunek();

			rachunek = (Rachunek) in.readObject();
			in.close();
			fileIn.close();
			System.out.println(rachunek.isEmpty());
			System.out.println(rachunek.isFull());
			System.out.printf("Dane zostaly odczytane z baza.dat");
			rachunek.drukujRachunek();
			
                    .....
	}
public class Produkty implements Serializable {


	private static final long serialVersionUID = 1L;

	private static int vat = 5;

	private String nazwa;
	private float cena;
	private int iloscStron;

        ...

        public String drukujListe() {
		return String.format("%-15s %-6.2f  %-4d", nazwa, cena, iloscStron);
	}


        ...

0

Pokaż klasę Rachunek.

0

Ale pokaż łaskawie ta klasę którą serializujesz. Co widzisz pod debugerem?

0

Dodałem zawartość obu klas

0

No to teraz odpal ten kod pod debugerem i zobacz co się dzieje jak deserializujesz. Otwórz też notatnikiem ten plik *.dat i zobacz co w nim siedzi i czy aby nie jest pusty.

0

Z debuggera wynika, ze wszystko jest okey, tablica obiektów zostaje odczytana. Plik baza.dat także nie jest pusty widać w nim zawartość która powinna się tam znajdować. Problem jest z przekazaniem zawartości po deserializacji do "wydruku" w konsoli.

1

A to oczywista sprawa. Bo łamiesz zasadę jednej odpowiedzialności! Serializację i deserializację powinieneś mieć POZA klasą którą serializujesz/deserializujesz. Bo teraz to wczytujesz obiekt z pliku i nic z nim nie robisz, bo nie możesz go przypisać do "this".

0

Problem rozwiązany, wszystko działa tak jak powinno. Dziękuję

1 użytkowników online, w tym zalogowanych: 0, gości: 1