Apps für Android programmieren leicht gemacht!

Textdatei speichern

Bereits vor einiger Zeit haben wir über das Speichern von Einstellungen berichtet.
Mittels SharedPreferences können wir kleinere Strings speichern und einfach wieder auslesen, doch was tun wir, wenn unser Text etwas länger wird?
Dies könnte beispielsweise der Fall sein, wenn wir in einer komplexeren App oder einem komplexeren Spiel Daten speichern müssen.

Wir speichern einfach in Textdateien, die theoretisch eine unendlich große Dateigröße erreichen könnten. Jedenfalls können wir extremst viele Daten speichern, bevor die Dateigröße ein kritisches Maß erreichen würde.

 

Als erstes benötigen wir den Context der Hauptklasse.
Befinden wir uns bereits in der Hauptklasse können wir den Context so definieren:

Context cxt = this;

Befinden wir uns nicht in der Hauptklasse können wir dieses „this“ einfach an die Subklasse übergeben.

Übrigens: Die Hauptklasse ist immer die Klasse, die in der AndroidManifest.xml definiert ist und als erstes von Android geöffnet ist. Es kann mehrere Hauptklasse geben.

 

Haben wir einen Context können wir eine Funktion schreiben, die uns eine TextDatei speichert.

private boolean saveToFile(String dateiname, String text){

    //Wahrheitswert, um zu prüfen, ob das Speichern erfolgreich war
    boolean b = true;

    FileOutputStream fos = null;
    try {

        //Öffne privaten FileOutputStream
        fos = cxt.openFileOutput(dateiname, Context.MODE_PRIVATE);

    } catch (FileNotFoundException e) {

       //Fehler beim Speichern
        b = false;

    }
    try {

        //Schreibe Text in die Datei 
        fos.write(text.getBytes());

    } catch (IOException e) {

       //Fehler beim Speichern           
      b = false;

    }
    try {

        //Schließe den FileOutputStream
        fos.close();

    } catch (IOException e) {

       //Fehler beim Speichern
        b = false;

    }

    return b;
}

 

Übrigens: Wenn wir die Datei öffentlich für alle anderen Apps speichern wollen können wir „Context.MODE_PRIVATE“ durch „Context.MODE_MULTI_PROCESS“ ersetzen.

 

Nun können wir die Datei speichern, indem wir die Funktion aufrufen:

String dateiname = "test.txt";
String text = "Dies ist unser erster Text";

saveToFile(dateiname, text);

Um zu prüfen, ob das Speichern erfolgreich war nutzen wir diesen Code:

String dateiname = "test.txt";
String text = "Dies ist unser erster Text";

if(saveToFile(dateiname, text)){
   //Erfolgreich
} else{
   //Fehlerhaft
}

 

Wir benötigen keine weiteren Berechtigungen, da wir im internen Speicher und Ordner der App speichern.

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

5 Kommentare

*Pflichtfeld

  • Wenn ich jetzt eine App machen wollen würde, wo ein Mensch die App auf seinem Handy hat. Er gibt einen kleinen Text ein in der App. Jetzt hat ein anderer Mensch irgendwo auf der Welt auch die App auf seinem Handy. Sieht er dann auch was der andere Mensch in die App geschrieben hat. Also das sich die App praktisch über das Internet selbst aktualisiert und alle Nutzer sehen was die anderen Nutzer gerade geschrieben haben? Oder brauche ich dafür einen anderen Code?

    Danke schon einmal 🙂

    • Hallo Felix,

      Nein dieser Code reicht leider nicht aus. Damit das was du willst funktioniert würde ich dir zum Senden und Empfangen von Google Cloud Messsges raten. Das habe ich (hier) schon einmal angeschnitten. Könnte es aber noch einmal in einem richtigen Artikel verpacken.

      • Vielen Dank, da kann ich mich dann bestimmt alleine durchlesen wie das klappt. Was mich noch interessieren würde. Man kennt ja von zahlreichen Spielen den Radar wo anfangs die Karte bis auf sagen wir mal 100 Meter Umfeld alles schwarz ist und je weiter man läuft umso mehr wird die Karte frei gelegt. Kann man das auch programmieren, dass ich eine schwarze Google Maps Karte habe bis auf einen bestimmten Radius und ich mit GPS laufe und die Karte dann auch frei wird und sich dann natürlich auch speichert wenn man die App verlässt? Natürlich sollte auch die Karte freigelegt werden wenn man die App nicht auf hat aber GPS angeschaltet ist.

      • Ein ehrlich gesagt nicht ganz triviales Unterfangen.
        Ich wüsste da gerade auch nicht genau, wie ich das angehen sollte. Wie gut sind denn deine Programmierkenntnisse?