Variablen für IMMER Speichern

  • Hallo,


    Ich möchte ein Variable so in Android Speichern, dass wenn das Programm beendet wird oder das Handy neugestartet wird, der variablen wert erhalten bleibt.


    Ein möglicher Anwendungsbereich währe beispielsweise ein boolean Variable, in der gespeichert wird, ob das Programm erstmals geöffnet wird.
    Außerdem habe ich mir Ausgedacht in meinem App jedem neuen Spiel eine eindeutige ID zuzuweisen. Diese müsste dann langfristig gespeichert werden.


    Ist dass außerhalb einer Datenbank möglich ???


    Danke für Antworten :D

  • Du suchst die SharedPreferences...


    Für eine eindeutige ID gibt es zwar TelephonyManager#getDeviceId() aber das braucht Rechte, die man nicht wirklich braucht und eventuell Benutzer abschreckt.


    Aber wenn du eine eindeutige ID brauchst, dann frag ich mal zurück, wo du sie brauchst. Wenn du z.B. eine High-Score-Liste auf einem Server speichern willst, dann kannst du doch vom Server beim ersten Zugriff (myID=-1) eine ID zurückgeben und dann hat deine App eine eindeutige ID für die nächsten Zugriffe (gespeichert in den SharedPreferences)...

  • Hallo,


    Ich habe mir nochmal den Code von UweApps angezeigt aber nicht alles verstanden.
    Beim lesen von SheredPreference, was bedeutet da -1.

    Java
    boolean silent = settings.getInt("positionX", -1);


    Könnte mir das jemand erklären. Auch das mit dem setzen mit Editor


    Danke

  • Oh - da hatte ich einen Fehler im anderen Beitrag drin - hab ihn gerade korrigiert.


    Es geht natürlich hier um int und nicht um boolean... :-[


    Java
    int myPostionX = settings.getInt("positionX", -1);


    Du kannst unterschiedliche Datentypen in die settings eintragen, es geht sogar derselbe Name, wenn sich der Datentyp unterscheidet...


    Bei getInt muss eine Variable mitgegeben werden, um ein Kennzeichen zu haben, dass die Variable nicht vorhanden war (bei String etc. kommt null).

  • nein, es wird von den get-Methoden der Preferences immer der Wert zurückgegeben, der vorher (hoffentlich) gespeichert war.


    Das kann auch (wenn man das vorher einträgt) durchaus eine -1 sein. Hängt halt von deinem Anwendungsfall ab. Die get-Methoden müssen ein Ergebnis liefern, zur Kennzeichnung, dass kein Eintrag vorhanden war, gibt's halt einen Notfall-Parameter...


    Die -1 gebe ich mit, weil ich in meiner Anwendung (im Beispiel waren es Bildschirm-Koordinaten) diese Zahl garantiert ungülitig ist und ich dann weiß, dass ich erst mal meine Daten einrichten sollte.


    Wenn deine Anwendung aber alle int-Zahlen (spez. um den 0-Punkt) braucht, dann kannst du auch Integer.MIN_VALUE nehmen - es ist kaum anzunehmen, dass du den Wert -2147483648 in deiner Anwendung brauchst... O:-)

  • Achso. Also ist -1 der wert der unter dem variabelname positionX in der datei MyPrefsFile festgelegt wird.
    Aber was soll dann diser teil.


    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    Editor.putInt("positionX", myPostionX);
    editor.commit();

  • Leider ist das Speichern der Preferences nur über diesen @{%@&-Editor möglich. Und den Editor bekommst du über den Umweg mit dem getSharedPreferences(NAME, MODE).


    Von den SharedPreferences kannst du mehrere haben, die jeweils einen NAME bekommen (sie werden als Dateien gespeichert - wenn noch nix da ist, wird neu angelegt).


    Außerdem können die Preferences auch wirklich geshared werden, dazu gibt's den MODE (0 = MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_MULTI_PROCESS)


    Das Beispiel zeigt nur einen Eintrag mit putInt(...), es gibt aber für den Editor eine ganze Menge an put-Methoden.


    Der Editor hat aber auch den Vorteil, dass du erst mal alle Einstellungen eintragen kannst und am Ende wird alles auf einmal gespeichert.


    Wenn dir zwischendurch das Handy wegen Saftmangel ausfällt, ist der alte Zustand der Prefs auf jeden Fall erhalten (und damit hoffentlich konsistent).

  • Es tut mir wirklich leid, aber ich habe das immer noch nicht verstanden.
    Ein Erklärungsversuch:

    Java
    SharedPreferences settings1 = getSharedPreferences(PREFS_NAME, 0);
    myPostionX = settings1.getInt("positionX", -1);


    Shared Preference wird ausgelesen und der Inhalt in der variable myPostion gespeichert. Sollte noch kein wert vorhanden sein, wird -1 gespeichert.

    Java
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("positionX", 0);
    editor.commit();


    Keine Ahnung was das soll??


    Ich brauche eigentlich nur den befehl zum schreiben und zum auslesen einer Intiger variable in Shared Preferences.


    Kann mir bitte jemand helfen. :-/ Ich bin ratlos ;(

  • Das was du da hast, bringt genau das.
    Der erste Schnippsel zeigt das auslesen aus der Datei und der Zweite sorgt für das abspeichern.
    Auch zu erkennen an put- und getInt ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Das was du da hast, bringt genau das.
    Der erste Schnippsel zeigt das auslesen aus der Datei und der Zweite sorgt für das abspeichern.


    Ok, danke für das Antworten.
    Das mit dem Auslesen habe ich jetzt verstanden. Aber das speichern noch nicht.


    Java
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("positionX", 0);
    editor.commit();


    Welcher wert wird hier in die variable positionX geschrieben ??? Etwa 0 ???

  • Genau. Da es im Editor ja unsinnig wäre, einen Defaultwert anzugeben, ist das der Wert, der gespeichert werden soll. ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Ok, Ich habe es jetzt geschafft die Anzahl der Spielstarts zu zählen.
    Hier der Code:

    Java
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    		myPostionX = settings.getInt("positionX", 0);
    		myPostionX++;
    		SharedPreferences settings1 = getSharedPreferences(PREFS_NAME, 0);
    		SharedPreferences.Editor editor = settings1.edit();
    		editor.putInt("positionX", myPostionX);
    		editor.commit();
    		Log.e("setzeSpielId", "Neu Spiele ID = "+myPostionX);
    		Toast.makeText(this, "Neu Spiele ID = "+myPostionX, Toast.LENGTH_SHORT).show();


    Danke für eure ausdauer bein Helfen :P

  • Um es für die Zukunft Lesbarer für DIch zu machen, würde ich Variablennamen vergeben welche aussagekräftiger sind.


    Shared preferences bestehen immer aus "KEY" , "VALUE" also einem Bezeichner und einem Wert


    In deinem Fall ist Positionx relativ merkwürdig für jmd der deinen Sourcecode einmal in die Hände bekommt.



    Code
    int anzahlSpielstarts



    wäre sicherlich aussagekräftiger.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!