Frage von ikinikin, 31

Android APP stürzt ab wenn ich etwas in einer Datei lese und dann speichere?

Hallo, ich habe eine meiner ersten Apps mit Java programmiert. Das Problem ist, dass die App abstürzt, wenn ich erst lese was in einer Datei steht und anschliessend die Datei überschreibe.

Code: if(gewonnenodernicht){

                int ausgabe;
                StringBuffer dateiInhalt = new StringBuffer("");
                try {
                    FileInputStream in = openFileInput("score.txt");

                    while( (ausgabe = in.read()) != -1)
                        dateiInhalt.append((char)ausgabe);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                dateiaddieren = Integer.parseInt(dateiInhalt.toString());
                dateiueberschreiben = dateiaddieren + gesAugenzahl;

                String dateiname = "score.txt";
                String score = Integer.toString(dateiueberschreiben);
                FileOutputStream outputStream;


                try {
                    outputStream = openFileOutput(dateiname, Context.MODE_PRIVATE);
                    outputStream.write(score.getBytes());
                    outputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
            Intent Home = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(Home);
        }

Kann mir jemand sagen was der Grund ist und wie ich den Fehler beheben kann? Es funktioniert eigentlich wenn ich es mit AndroidSTudio auf dem Handy laufen lasse. Aber nachdem ich eine .apk erstellt habe nicht mehr.

Antwort
von MalNachgedacht, 16

Ich würde mal vermuten, dass Du den FileInputStream in  erst einmal schließen musst - also:

 in.close();

nachdem Du den alten Spielstand gelesen hast bevor Du die gleiche Datei anschließend als FileOutputStream öffnest.

Auch ein Blick in LogCat könnte dabei helfen herauszufinden wo genau der Fehler auftritt.

Noch einfacher wäre es natürlich die App im Debug-modus zu starten und einen Breakpoint zu setzen um dann Schritt für Schritt die Befehle abzuarbeiten bis es "rumpelt".

Ansonsten würde ich mir auch mal die Klassen DataInputStream und DataOutputStream anschauen - diese Klassen bieten Methoden wie readInt() oder writeInt()  oder auch readUTF() und writeUTF()  (für Strings) mit denen man solche Daten ohne hin und her konvertieren direkt lesen und schreiben kann (allerdings in einem binären Format - also für Menschen welche die Datei mit einem Texteditor öffnen nicht gut lesbar - aber das sollte ja in dem Fall nicht stören)

Kommentar von ikinikin ,
FileInputStream fis = new FileInputStream("score.dat");
DataInputStream dis = new DataInputStream(fis);

Inhalt = dis.readInt();
dis.close();
Toast.makeText(getApplicationContext(), Inhalt, Toast.LENGTH_SHORT).show();

//Datei Inhalt addieren dateiueberschreiben = gesAugenzahl + Inhalt;

//Schreiben FileOutputStream fos = new FileOutputStream("score.dat");
DataOutputStream dos = new DataOutputStream(fos);

dos.writeInt(dateiueberschreiben);
dos.flush();
dos.close();

} catch (IOException e) {
e.printStackTrace();
}

Hab das jetzt so gemacht aber es wird nicht der Toast der nach dem lesen angezeigt und trotzdem wird nur 0 auf der Hauptseite angezeigt, wo der Punkte stand stehen sollte.

Das ist die Hauptseite: 

try {
//Lesen FileInputStream fis = new FileInputStream("score.dat");
DataInputStream dis = new DataInputStream(fis);

Inhalt = dis.readInt();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}

score.setText("Deine Punkte: " + Inhalt);

Keine passende Antwort gefunden?

Fragen Sie die Community