Speicherung von vielen einstellungen in xml

  • 14 Antworten
  • Letztes Antwortdatum
M

moobi

Neues Mitglied
0
Hallo,
ich bin noch recht neu in der Android-Entwicklung und habe deswegen noch wenig Erfahrung. Ich mache ich einem kleinen Team ein einfaches Spiel auf einem Tablet. Das Hauptaugenmerk dabei wird nicht das Spiel selbst sein sondern die vielen Einstellungen, welche das sonst recht einfache Spiel weitläufig konfigurieren lässt.
Ich hätte deswegen ein paar Fragen welche nur als Anstoß beantwortet haben möchte.

So, das Spiel soll mehere Module haben, welche alle eigene Einstellungen besitzen. Also quasi mehrere Spielmodi, welche der Spieler selbst einstellen kann. An der Speicherung der Module dachte ich an ein xml-file das ungefähr so ausschauen könnte:
<module name="module1">
duration=5
image1="blue_circle"
image2="yellow_square"
</module>
<module name="module2........
....

Ist die Speicherung in solch einer Weise sinnvoll?
 
Du kannst dir das leben Schwer machen, in dem du es in eine XML schreibst. Warum du das auch immer tun willst.
Oder eben die Standard-Speicherung von Android benutzten: SharedPreferences | Android Developers

Code:
      SharedPreferences settings = getSharedPreferences("MODULE1", 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putInt("duration", 5);
      editor.putStirng("image1", "blue_circle");
      editor.putStirng("image2", "yellow_square");
      editor.commit();
 
settings = getSharedPreferences("MODULE2", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("duration", 5);
editor.putStirng("image1", "blue_circle");
editor.putStirng("image2", "yellow_square");
editor.commit();

Sieht irgendwie einfacher aus xD
Warum also kompliziert, wenn es auch einfach geht?

Gruß
 
das ist schonmal super, danke!

was ich noch vergessen habe zu erwähnen. Die Einstellungen die man in dem Programm vornimmt sollen permanent gespeichert sein und mit einem mit einem File explorer händisch auf den pc kopiert werden um sie auf ein anderes tablet zu speichern. Also am besten auf der SD-Card. Kann ich dazu dein beispiel verwenden? Oder kannst du mir bitte ein kurzes codebeispiel liefern?
vielen dank!
 
Die SharedPreference Datein werden gespeichert unter:
/data/data/PAKET_NAME/shared_prefs/SHARED_PREF_NAME.xml

Man kann auf diesen Ordner aber nur mit Root-Rechten zugreifen.

Wenn du das ohne Root-Rechte haben willst, kannst du mittels ein paar Befehlen die komplette xml-Datei auslesen und in eine eigene xml auf der SD kopieren. Dazu einfach google durchsuchen, da wird man fündig ;)
 
Guten Morgen,

und wenn du die IO-Schicht abstrahierst ist es letztendlich easy doing die wirkliche Speicherung zu verlagern/ zu ändern ;)
Also z.B. preferences gegen XML auszutauschen oder gegen eine Datenbank.

lg. Dagobert
 
Hallo, ich bin jetzt ein bisschen am rumtüfteln und stehe noch vor einigen Schwierigkeiten. So erstelle ich gerade ein neues Modul (der User des Programms soll mehrere erstellen können, weswegen ich den String nameForNewModule so gestalten will, dass das erste Modul den Namen MODULE0, das zweite den Namen MODULE1 ... bekommt.
Um dies umzusetzen muss ich aber wissen, wieviele Module bereits vom User erstellt wurden. Wie kann ich dies herrausfinden??
Code:
    	SharedPreferences pref_modulesettings = getSharedPreferences(nameForNewModule, 0);
        SharedPreferences.Editor editor = pref_modulesettings.edit();       
        editor.putString("module_name", module_name);
        editor.putString("module_description", module_description);
        editor.putBoolean("blue_circle", blue_circle);
        editor.putBoolean("yellow_square", yellow_square);
        editor.commit();


Desweiteren noch eine Frage zu SharedPreferences allgemein: Ich hatte zu beginn des Projektes schon eine Klasse Module erstellt in der eigentlich mehrere Objekte, eben je nachdem wieviele der User erstellt, speichern wollte. Diese Klasse wird ja nun durch SharedPreferences ersetzt.
Bin ich da überhaupt auf dem richtigen Weg???


Noch eine Frage: Wie greife ich auf
 
Um dies umzusetzen muss ich aber wissen, wieviele Module bereits vom User erstellt wurden. Wie kann ich dies herrausfinden??
Du hast du bestimmt ne Liste wo die Module drin gespeichert werden... einfach durch die Liste iterieren?!

Noch eine Frage: Wie greife ich auf
Ja bitte?

Ich hatte zu beginn des Projektes schon eine Klasse Module erstellt in der eigentlich mehrere Objekte, eben je nachdem wieviele der User erstellt, speichern wollte. Diese Klasse wird ja nun durch SharedPreferences ersetzt.
Warum möchtest du eine Klasse durch eine Persistence Schicht ersetzen? oO

lg. Dagobert
 
DagobertDokate schrieb:
Du hast du bestimmt ne Liste wo die Module drin gespeichert werden... einfach durch die Liste iterieren?!

Die Frage könnte sich erübrigen, wenn ich weiß wie ich Shared Prefrences und eine Klasse "verbinden" kann. (siehe untere Frage).

DagobertDokate schrieb:
Warum möchtest du eine Klasse durch eine Persistence Schicht ersetzen? oO

Naja, ich speichere jedes Modul in dieser Form:
Code:
    	SharedPreferences pref_modulesettings =     getSharedPreferences(nameForNewModule, 0);
        SharedPreferences.Editor editor = pref_modulesettings.edit();       
        editor.putString("module_name", module_name);
        editor.putString("module_description", module_description);
        editor.putBoolean("blue_circle", blue_circle);
        editor.putBoolean("yellow_square", yellow_square);
        editor.commit();
Soll ich dann danach noch ein dazugehöriges Objekt meiner Klasse Modul erstellen, das genau die gleichen eigenschaften wie die Preference hat? Ich bin mir über die Verbindung zwischen den Shared Preferences und meiner Klasse "Modul" die ich eigentlich verwenden möchte nicht ganz klar:(


Ich habe noch eine weitere kurze Frage. Kann man ein Tablet ohne Hardwaretasten zur Navigation, komplett im Vollbildmodus laufen lassen? Sodass sogar die Naviagationsleiste nicht mehr sichtbar ist?
 
Ich glaub nicht wie soll der user dann noch aus deiner App raus ^^

Mit Freundlichen Grüssen :D
Bei Fehlern nicht Steinigen
 
Greenstar schrieb:
Ich glaub nicht wie soll der user dann noch aus deiner App raus ^^

Mit Freundlichen Grüssen :D
Bei Fehlern nicht Steinigen

Dann müsste ich eine extra Exit-Funktion einbauen. Ansonsten wäre der User eingesperrt. Aber es muss doch einen Weg geben dies zu machen?
 
Ganz ehrlich?
Ich hoffe nicht das es so einen Weg gibt xd

LG. Dagobert

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Ich hab keine möglichkeit gefunden

Mit Freundlichen Grüssen :D
Bei Fehlern nicht Steinigen
 
gibt es dann eine methode die actions buttons in der navigationsleiste zu ändern? Sodass sie nichts machen?
 
Du kannst den zurück Button überschreiben. Das Multiflow und den Home Button nicht. Außer du initalisierst deine App als Launcher..

Gruß
 
StefMa schrieb:
Du kannst den zurück Button überschreiben. Das Multiflow und den Home Button nicht. Außer du initalisierst deine App als Launcher..

Gruß

Was macht einen Launcher aus? Ich möchte diese App nicht veröffentlichen - nur für den Eigengebraucht. Es ist aber wichtig, dass diese Leiste verschwindet/deaktivert ist

Danke, ihr habt mir bisher schon gut weitergeholfen!
 
Zurück
Oben Unten