Spielstand und Spielfiguren sichern (in: onCreate(savedInstanceState) ?)

M

menseken

Neues Mitglied
0
Hallo!

Dank (u.a.) Eurer Hilfe konnte ich zuletzt ein JavaScript-Programm für Android-Java umbauen, (hier).

Einige kleine Bugs sind noch drin:

Meine App bringt z.B. leider beim "Resume" (vom Desktop, usw.) die unschöne Meldung der "unerwarteten Beendigung". Ich nehme an, dass ich folgendes Array, das das Spiel beschreibt, irgendwie sichern müsste.

WIE ungefähr kann ich das WO am besten machen?
Code:
int mJall[][][][]=new int[8][9][7][3]; // ALLES: Reihe/Zeile/Höhe/ Name,X-,Y-Wert
(Oben werden die Werte später eingesetzt.)

Folgender (vereinfachter) Code malt die Steine in die Canvas einer SurfaceView:
Code:
private void doDraw(Canvas canvas) {
   for (int i=0;i<8;i++)   for (int j=0;j<9;j++)   for (int k=0;k<7;k++){
      canvas.drawBitmap(myBitmaps [mJall[i][j][k][0]], i*62-k*8, j*67-k*7, null);
}}
(Nach und nach werden die gelöschten Steine im Array markiert.)

Vielen Dank schon im Voraus für Eure Hilfe!

(Als kleine Info hier das schon 'mal gepostete Bild: )
.
 

Anhänge

  • MahJonG.09.png
    MahJonG.09.png
    840 KB · Aufrufe: 481
ganz genau

du solltest im onPause() deinen spielstand sichern

und im onResume wieder laden

bzgl deiner fehlermeldung - schau im logcat nach, das gibt nützliche hinweise
 
swordi schrieb:
ganz genau
du solltest im onPause() deinen spielstand sichern
und im onResume wieder laden
bzgl deiner fehlermeldung - schau im logcat nach, das gibt nützliche hinweise
Hmmm - ja.

... aber wie? :

In eine neue Variable? In eine SQLite-DB?

Könntest Du mir sagen, wie & wohin ich das am besten mache?
(Ich bin kein Informatiker, sondern Grafiker mit Spieldrang...)
 
naja

du benötigst halt eine globalere datenstruktur, die auch beim erneuten öffnen der app, wenn sie noch im hintergrund läuft, die daten behaltet.

evtl eine datenstruktur in der application anlegen.
 
menseken schrieb:
Hmmm - ja.

... aber wie? :

In eine neue Variable? In eine SQLite-DB?

Könntest Du mir sagen, wie & wohin ich das am besten mache?
(Ich bin kein Informatiker, sondern Grafiker mit Spieldrang...)

Ich würde empfehlen einen Java-Object-\[Baum\] im JSON-Datei zu sichern. Ich verwende meine selbstgestrickte Datenbindung-Bibliothek:

https://github.com/ko5tik/jsonserializer
 
Vielen Dank für Eure hilfreichen Antworten -

... aber ich bin leider "nur" ein Grafiker, der versucht ein vorhandenes Problem auf (für mich) übersichtliche Art & Weise zu lösen.
Ich habe auf der developer.android.com-Seite Folgendes gefunden:

Using the Internal Storage (..example):

To create and write a private file to the internal storage:
Code:
[FONT="Courier New"][B]String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();[/B][/FONT]
To read a file from internal storage:

Call openFileInput() and pass it the name of the file to read. This returns a FileInputStream.
Read bytes from the file with read().
Then close the stream with close().
Ich habe zwar ein 4-dimensionales Array, aber das werde ich dann (wie bei der Erstellung) über mehrfach geschachtelte for-Schleifen als String speichern.

Danke nochmals, Ciao, Clemens
 
Hallo menseken,
zum Speichern deines int-arrays kannst du die onSaveInstanceState-Methode in deiner Activity wie folgt überschreiben:
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
//savedInstanceState.putIntArray(key, value);
savedInstanceState.putIntArray("MeineSteinchen", mJall[][][]);
super.onSaveInstanceState(savedInstanceState);
}

Nun wird beim Stoppen (z.B. Display-Orientierungswechsel) der Anwendung das int-array gespeichert.

Beim Start/Resume der Anwendung holst du es dann in der onCreate-methode folgendermaßen zurück:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mJall[][][] = savedInstanceState.getIntArray("MeineSteinchen");
...

Hoffe, dass ich rechtzeitig helfen konnte.
Marco
 
  • Danke
Reaktionen: menseken
JoeBonham schrieb:
Hallo menseken,
zum Speichern deines int-arrays kannst du die onSaveInstanceState-Methode in deiner Activity wie folgt überschreiben:
@Override
public void onSaveInstanceState(Bundle savedInstanceState){

[ ... ]

mJall[][][] = savedInstanceState.getIntArray("MeineSteinchen");

Hoffe, dass ich rechtzeitig helfen konnte.
Marco
Das sieht ja wirklich GUT aus:

übersichtlich, verständlich und KONKRET !
Vielen Dank, Marco - ich gehe davon aus, dass es genau so funktioniert.

DANKE !
 

Ähnliche Themen

R
Antworten
9
Aufrufe
730
koje71
koje71
retrozap
  • retrozap
Antworten
0
Aufrufe
779
retrozap
retrozap
P
Antworten
9
Aufrufe
1.933
pseudopat
P
Zurück
Oben Unten