| |||||||
Das Thema "Nutzung des FileInput/OutputStreams" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
![]() |
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Modell: Motorola Milestone Registriert seit: 08.11.2009
Beiträge: 167
Abgegebene Danke: 10
Erhielt 2 Danke für 2 Beiträge
| ich will, ganz simpel, den highscore meines Tetris spiels in einem File speichern und beim starten des Spiels einlesen. (bei game over dann speichern) ich habe als erstes natürlich auf der android seite geschaut und folgendes gefunden: Data Storage | Android Developers und dann mit meinen alten java kenntnissen folgendes gebastelt: Code: // int highscore = 8; z.b.
// score soll die datei heissen, in die ich schreiben will
try {
FileOutputStream stream = myContext.openFileOutput("score", 0);
PrintStream ps = new PrintStream(stream);
ps.print(highscore);
ps.close();
stream.close();
} catch [...]
} leider kann ich nicht verifizieren ob er das file erstellt, da ich nicht weiss, wo android das macht - vielleicht liegt auch da schon gleich das problem, muss ich einen genauen Pfad angeben? (./sdcard ...) naja, also wie gesagt, da kommt zumindest keine fehlermeldung. wenn ich aber nun versuche einzulesen, bekomme ich eine EndOfFileException: Code: try {
FileInputStream instream = context.openFileInput("score");
DataInputStream in = new DataInputStream(instream);
this.highScore = in.readInt();
in.close();
instream.close();
} catch [...]
} sind das überhaupt die richtigen befehle um zu lesen und zu schreiben? habt ihr nen tipp? oder ne idee, wie ich mit dem debugger rausfinden kann, ob er das file wirklich kreeirt und soweiter? danke im Vorraus! |
| | |
| | #2 (permalink) |
| Android-Hilfe.de Mitglied Modell: LG P990 Registriert seit: 16.05.2009
Beiträge: 89
Abgegebene Danke: 2
Erhielt 24 Danke für 19 Beiträge
|
Hallo, ich hab mal deinen Code ein bisschen angepasst. Dein Hauptproblem lag an PrintStream welches deinen int Wert in Klartext abspeichert, DataInputStream/DataOutputStream arbeiten da anders. Deshalb bekommst du auch die EOF Exception, diese wird geworfen weil das Ende erreicht wird bevor vier Bytes gelesen werden können. Code: try {
FileOutputStream stream = new FileOutputStream("/sdcard/score");
DataOutputStream ps = new DataOutputStream(stream);
ps.writeInt(highscore);
ps.close();
stream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileInputStream instream = new FileInputStream("/sdcard/score");
DataInputStream in = new DataInputStream(instream);
highscore += in.readInt();
in.close();
instream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Code: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> Du kannst deine Highscores auch in einer anderen Weise einfacher Speichern, Stichwort Serialisieren von Objekten. Auf der Seite is es schön erklärt und ein Beispiel ist auch dabei. Viel Spaß, Stefan |
| | |
| Folgender Benutzer bedankt sich bei Melbar für diesen Beitrag: | Keija (17.12.2009) |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied Modell: Motorola Milestone Registriert seit: 08.11.2009
Beiträge: 167
Abgegebene Danke: 10
Erhielt 2 Danke für 2 Beiträge
|
hi, danke für die ausfürhliche antwort! ist ja echt tip top hier ^^ ... werds morgen in aller ruhe mal ausprobieren ![]() danke für die errinnerung ans serialisieren ^^ hatte ich auch schon wieder ganz vergessen - hatte eigentlich nur vor einen int zu speichern, aber im prinzip könnt ich mir auch ne highscore klasse schreiben. gute idee |
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied Modell: Motorola Milestone Registriert seit: 08.11.2009
Beiträge: 167
Abgegebene Danke: 10
Erhielt 2 Danke für 2 Beiträge
|
so, habs jetzt hinbekommen und wollte doch meine lösung hier posten ![]() Leider hats mir heute morgen 5 stunden arbeit zerschossen, sodass ich jetzt mit meinem tetris projekt aufhöre ^^ ScoreObj ist ein Objekt meiner Serialisierbaren Score klasse =] Schreiben: Code: try {
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream("/sdcard/score"));
ObjectOutputStream oos = new ObjectOutputStream(stream);
oos.writeObject(scoreObj);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} Code: try {
BufferedInputStream bs = new BufferedInputStream(new FileInputStream("/sdcard/score"));
ObjectInputStream objIn = new ObjectInputStream(bs);
highScore = (Score) objIn.readObject( );
objIn.close();
bs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} Geändert von Keija (21.12.2009 um 15:20 Uhr) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Modemnutzung nachweisen | wusselwu | Smalltalk und Offtopic | 22 | 26.07.2010 14:40 |
| Nutzung ohne Google-Account | bornheim | HTC Hero / T-Mobile G2 Touch Forum | 6 | 13.12.2009 22:22 |
| O2 My Handy + Nutzung mit D1 | Gruendlich | Motorola Milestone Forum | 3 | 17.11.2009 21:30 |
| Skype Nutzung | WebWorks | Tarife / Provider für T-Mobile G1 | 1 | 26.09.2009 22:58 |
| WLAN-UMTS Nutzung | Mottek | Android Allgemein | 5 | 03.06.2009 17:53 |