myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   laden geht nicht :-( (https://mygully.com/showthread.php?t=2229826)

Kingler93 11.02.11 19:42

laden geht nicht :-(
 
Hey Leutz,

ich habe folgendes Problem:
Ich will mir einen Notizblock in Java programmieren . In diesem Notizblock gibt es zwei ArrayLists (liste und listeGeheim). Nun soll man das ganze auch speichern können, aber nur in einer Datei. Also zwei Listen in eine Datei. Hier meine Lösung:
Beide Listen werden in einer Liste (speicherListe) gespeichert, in der außerdem die Länge der zweiten Liste (listeGeheim) angegeben ist, damit ich sie nachher (beim laden) wieder auseinander wuseln kann^^.
Hier der Quellcode für das speichern:

Code:

try
          {
              speicherListe.addAll(liste);
              speicherListe.addAll(listeGeheim);
              speicherListe.add(String.valueOf(listeGeheim.size()));    //es wird ein String erstellt, der die Länge der Liste "listeGeheim" angibt
              FileOutputStream output = new FileOutputStream("Notizen.ser");
              ObjectOutputStream outStream = new ObjectOutputStream(output);
              outStream.writeObject(speicherListe);
              outStream.close();
          }
          catch (Exception e)
          {
              System.out.println("Es konnte nicht gespeichert werden.");
          }

Hier der Quellcode für das laden:

Code:

try
        {
            FileInputStream objIn = new FileInputStream("Notizen.ser");
            ObjectInputStream inStream = new ObjectInputStream(objIn);
            ArrayList<String> pListe = (ArrayList<String>) inStream.readObject();
            inStream.close();
            speicherListe.addAll(pListe);
            int i =  Integer.parseInt(speicherListe.get(speicherListe.size()));  // i ist gleich der länge der Liste "listeGeheim" vor dem speichern
            speicherListe.remove(speicherListe.size());
            listeGeheim.addAll((speicherListe.size() - i), speicherListe);  // "listeGeheim" bekommt seine alten Werte zumindest theoretisch^^
            for (int x = speicherListe.size(); x > i; x--) // die Werte von "listeGeheim" werden aus "speicherListe" gelöscht
            {
                speicherListe.remove(x);
            }
            liste.addAll(speicherListe); // "liste" bekommt seine Werte wieder (theoretisch)
            speicherListe.clear(); // "speicherListe" wird auf null gesetzt
        }
        catch (Exception e)
        {
        }

Das Problem ist nun, dass nach dem Laden beide ArrayLists (sowohl "liste" als auch "listeGeheim") leer sind .

Danke schonmal im Vorraus.
Falls noch Fragen zum Quelltext oder zum Problem einfach schreiben^^.
Mfg Kingler93

P.s.
ich bin mir ziemlich sehr sicher das der fehler beim laden zu suchen ist, weil in der Datei "Notizen.ser" die Einträge vorhanden sind^^

germgerm 12.02.11 11:00

Wie du schon vermutet hast, funktioniert das Speichern.
Ich vermisse nur die Initialisierung von speicherListe, das machst du hoffentlich woanders.
Beim Laden sehe ich auch keine Initialisierung.

Der Fehler im Programm ist, dass du beim Laden immer direkt die Methode Size verwendest. Bei Java ist (wie in C) das erste Element 0, das zweite 1, usw.
Wenn du statt dessen (Size-1) verwendest, schmiert das Prog nicht mehr ab.

Ich gehen davon aus, dass du keinen Debugger verwendet hast, sonst wärst du selbst darauf gekommen.
Das Einbauen von println zählt auch als Debugging, falls du es nicht anders willst oder kannst. Sogar die Exception ist leer. {Oberlehrer-Smiley}

Edit: Da http://www.usa-reise.net/forum/smf/S...ult/dozent.gif

Kingler93 12.02.11 11:40

hey,

Erstmal danke für die schnelle Antwort^^.
Ja ich initialisiere die speicherListe woanders :T.

Meinst du, dass der zum Bleistift eine OutOfBoudsException ausgibt und darum von try-catch nur den catchteil (also garnichts) ausführt?

mfg Kingler

AllYouCanEat 12.02.11 12:38

Benutze doch einfach einen Debugger!

Bei so einem schlechten Programmierstil ist es zu mühselig Dir zu helfen...

germgerm 12.02.11 17:38

Zitat:

Zitat von Kingler93 (Beitrag 21902891)
Meinst du, dass der zum Bleistift eine OutOfBoudsException ausgibt und darum von try-catch nur den catchteil (also garnichts) ausführt?

Ich meine, dass der Bytecode-Interpreter bis zur folgenden Zeile kommt und dann im leeren catch weitermacht:

int i = Integer.parseInt(speicherListe.get(speicherListe.s ize()));

Kingler93 12.02.11 18:53

Okay habe das Problem gelöst^^
Danke für eure Hilfe!

Mfg Kingler

AllYouCanEat 12.02.11 21:10

Und woran lag's?

Das sind eh die besten.
Andere um Hilfe bitten, aber sich einen scheiss dafür interessieren, dass andere auch was mit der Lösung anfangen könnten...

germgerm 13.02.11 06:27

Zitat:

Zitat von AllYouCanEat (Beitrag 21905538)
Und woran lag's?...

Er hat es so gelöst, in dem er meine Lösungsvorschläge eingebaut hat.
Sonst war in diesen Schnippsel nichts wirklich falsches.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.