Daten in Datei Speichern -> Highscore

O

ostone86

Neues Mitglied
0
Hallo, ich habe ein Android-Spiel programmiert. Die Game-Loop läuft soweit einwandfrei. Nur habe ich nun Probleme die Einträge aus dem Highscore permanent zu speichern. Ich habe mir zuvor eine Test-Klasse in Java geschrieben die die Daten aus einer ArrayList _highscore unter anderem in eine txt-Datei schreiben soll und auch wieder lesen können muss. In der Java-Console klappt das einwandfrei. Instanziiere ich die Highscore-Klasse nun aber in meiner Android Highscore-Activity stürzt die App im Virtual-Device allerdings beim Aufruf der writeData() Methode ab.

Der Code lautet wie folgt:

Code:
public class Highscore {
    
    // in der ArrayList stehen die Highscore-Einträge
    private ArrayList<String> _highscore = new ArrayList<String>();
    
    // Methode zum Hinzufügen von Spielennamen und Punktzahl
    public void addData(String name, int score){
        
        String newName = name;
        int newScore = score;
        _highscore.add(newName +"#" +newScore);
    }
    
    // Methode zum Datei lesen
    public void readData() throws ClassNotFoundException{
        try {
            final ObjectInputStream input = new ObjectInputStream(new FileInputStream("Highscore.txt"));
            Object highscore = input.readObject();
            input.close();
            _highscore = (ArrayList<String>) highscore;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    // Methode zum Datei schreiben
    public void writeData(){
        try {
            final ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("Highscore.txt"));
            output.writeObject(_highscore);
            output.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public String getName(int index){
        String data = _highscore.get(index);
        String[] res = data.split("#");
        return res[0];
    }
    
    public int getScore(int index){
        String data = _highscore.get(index);
        String[] res = data.split("#");
        return Integer.parseInt(res[1]);
    }
    
    // Highscore-Liste sortieren
    public void sortData(){
        for(int j=1; j < _highscore.size(); j++){
            for(int i = 0; i < _highscore.size()-j; i++){
                if(getScore(i) < getScore(i + 1)){
                    String tmp = _highscore.get(i);
                    _highscore.set(i, _highscore.get(i+1));
                    _highscore.set(i + 1, tmp);
                }
            }
        }
    }
    
    public String sortedHighscore(int index){
        String space = _highscore.get(index);
        return space;
    }

}
Muss ich Android einen Pfad zum Speichern vorgeben? Bei Java wird dies ja einfach direkt in den Hauptpfad des Programms geschrieben. Benötigt meine App dafür spezielle Android-Berechtigungen?

Kann da jemand weiterhelfen?
 
Könntest Du bitte die Fehlermeldung (Logcat) auch posten.
 
Hallo, die Error-Meldungen sind für mich total unverständlich. Es wird folgendes ausgegeben:

02-26 06:56:49.174: E/SoundPool(398): error loading /system/media/audio/ui/Effect_Tick.ogg
02-26 06:56:49.174: E/SoundPool(398): error loading /system/media/audio/ui/Effect_Tick.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/Effect_Tick.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/Effect_Tick.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/Effect_Tick.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/KeypressStandard.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/KeypressSpacebar.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/KeypressDelete.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/KeypressReturn.ogg
02-26 06:56:49.184: E/SoundPool(398): error loading /system/media/audio/ui/KeypressInvalid.ogg

Der Witz ist aber, dass ich irgendwo Sounds laden lasse, in meiner Activity.

Dort lautet der Quellcode bisher lediglich:

Code:
// Instanziieren der Highscore-Klasse
private static Highscore _highscore;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_highscore);
        
        // Hinzufügen von Test-Einträgen
        _highscore.addData("Frederik", 2010);
        _highscore.addData("Jonathan", 2012);
        _highscore.addData("Daniel", 1986);
        _highscore.addData("Stephanie", 1983);
        
        _highscore.writeData();
    }
Ich habe auch vor _highscore.writeData(); einen Brack-Point gesetzt, aber dieser wird gar nicht erreicht...

Weißt du da Rat?

----

Okay, eine Zeile hatte noch gefehlt...

_highscore = new Highscore();

Nun gibt es zumindest erstmal keinen Absturz mehr...
 
Zuletzt bearbeitet:
Funktioniert jetzt alles?

und

Java ist nicht C++. Halte Dich an die Namenskonvention von Android, dass erhöht die Lesbarkeit für andere.

https://source.android.com/source/code-style.html
(Besonders den Absatz "Follow Field Naming Conventions").

 
Hi,

es funktioniert jetzt soweit.

Aber was meinst du konkret mit der Namenskonvention von Android? Habe ich etwas falsch benannt? Hatte mich in der Wahl der Bezeichner an die Nomenklatur unseres Dozenten gehalten...
 
hey für solche sachen wie highscores und generell einstellungen benutze ich sharedpreferences... viel einfacher ...brauicht man sich nichtz mit streams bescvhäftigen

du lädst einfach alles in oncreate und speicherst bei bedarf in onPause nur mal als beispiel kannst ja auch eigene funktionen implementieren die von zeit zu zeit specihern
 
_highscore

Das ist eine typtische Schreibweise in Objektive-C oder C++. In Java benutzt man normalerweise keine "_" in Variablen.

Wenn ich irgendeine Variable sehe, wo ein "_" steht, denke ich bei Android sofort an XML.

Schätze mal, dass dein Dozent ein typisches Gewohnheitstier ist.

Es macht einfach den Code lesbarer.
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.869
swa00
swa00
S
Antworten
33
Aufrufe
2.540
Sempervivum
S
G
Antworten
8
Aufrufe
1.168
gnome2012
G
Zurück
Oben Unten