Preferences - Default Werte

  • Antworten:6
Mac Systems
  • Forum-Beiträge: 1.727

07.11.2009, 12:33:35 via Website

Ich versuche herauszufinden wann Android die Defaultwerte die in meinen Preferences hinterlegt sind bei Start der Applikation das erste mal schreibt.
Im XML können diese ja angegeben werden, doch scheint es mir so das diese erst dann an persistent werden wenn Ich eine PreferencesActivity aufrufe und danach verlasse. Das wäre aber fatal für andere Teile meine Anwendung, ist das wirklich so oder kann Ich etwas dafür tun das dies auch vorher passiert ?

Hoffe auf Antworten,
Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

07.11.2009, 12:43:16 via Website

ähm defaultwerte müssen ja nicht geschrieben werden.

du lädst zb den wert MEIN_WERT

sagst dann ja
1String tmp = getString(MEIN_WERT, "default");
sollte keine Preference für MEIN_WERT eingetragen sein, dann wird tmp "default" zugewiesen. nix weiter. der defaultwert kommt nur dann ins spiel, wenn bisher noch keine preference mit dem eintrag vorgenommen wurde.

in der preferenceactivity werden dann wohl alle werte einmal gespeichert, deshalb wird da vorher nix passieren.

swordiApps Blog - Website

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

07.11.2009, 15:10:04 via Website

Dieses Verhalten führt aber zu dubbletten, im Code wie im XML kann Ich default werte anlegen, je nach Ablauf kann es hier zu unterschiedlichem verhalten kommen, wenn man nicht sehr genau aufpasst.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

07.11.2009, 15:41:23 via Website

jap das kann durchaus sein, da muss man aufpassen. aber ein wert wird immer den gleichen defaultwert haben. dann ist das schon wieder halb so schlimm.

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

07.11.2009, 16:53:53 via Website

Mac Systems
Ich versuche herauszufinden wann Android die Defaultwerte die in meinen Preferences hinterlegt sind bei Start der Applikation das erste mal schreibt.
Im XML können diese ja angegeben werden, doch scheint es mir so das diese erst dann an persistent werden wenn Ich eine PreferencesActivity aufrufe und danach verlasse. Das wäre aber fatal für andere Teile meine Anwendung, ist das wirklich so oder kann Ich etwas dafür tun das dies auch vorher passiert ?

Hoffe auf Antworten,
Mac

Moin Mac,

ich hab mir für eine meiner Apps mal eine kleine Methode geschrieben wo ich das einfach überprüfe ob eine bestimmte Preference bereits existiert.
1/**
2 * Method for checking wether a given Preference Key exists or not
3 * @param pref the String with given Preference which needs to be defined in Class header
4 * @param key the String with the name of the corresponding key
5 * @return True if key exists otherwise false
6 */
7 protected boolean checkPreferencesKeyNotifyExists(String pref, String key) {
8
9 SharedPreferences mySharedPreferences = getSharedPreferences(pref, CONTEXT.MODE_PRIVATE);
10
11 /* loading the value from Preferences*/
12 if (mySharedPreferences.contains(key) !=true) {
13
14 return false;
15 }
16 else {
17 return true;
18
19 }
20
21
22 }
Probier es doch mal damit, evtl. kannst Du damit auch das persistieren der Preferences erzwingen.

lg Voss

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

07.11.2009, 17:45:38 via Website

Hi Jörg,

jep Ich muss es erzwingen, da im Hintergrund meine Datenbak werkelt. Alle Werte laufen über die Datenbank, daher müssen anfangs die Werte in die DB wandern.
Für mich wäre es am besten diese an einer Stelle zu haben, leider bietet das Preferences API keine direktes nutzen mittels SQL an.
Mein Ansatz ist momentan das ich bei einem onPause die Werte aus dem Config File in die Datenbank schreibe, soweit ist das auch ok. Nur eine Anwendung die nie in die Preferences gelangt ist somit ein Problem. Ich brauche also wirklich eine Möglichkeit das zu erzwingen. Gestern hatte Ich auch irgendwo in den tiefen der API was gefunden was Hoffnung gab. (war wieder viel zu später für so was, daher weiß ich nicht mehr wo es war).

Mal als Inspiration an andere:

1@Override
2 protected void onPause()
3 {
4 super.onPause();
5 Log.d(LOG_TAG, "onPause");
6 // Commit Changes to Database
7 final IPreferencesDAO dao = DAOFactory.getPreferencesDAO(this);
8 final Map<String, ?> prefs = Util.getSharedPreferences(this).getAll();
9 final Iterator<String> iter = prefs.keySet().iterator();
10 while (iter.hasNext())
11 {
12 final String key = iter.next();
13 final Object value = prefs.get(key).toString();
14 Log.d(LOG_TAG, "updating database from preferences with key " + key + " value = " + value.toString());
15 dao.update(key, value.toString());
16 }
17 }

- Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

08.11.2009, 12:02:48 via Website

warum willst du das in der db speichern?

preferences sind nunmal einfache wertepaare und für was sollen die in der db gespeichert werden, wenn es doch so viel besser ist.

welchen anwendungsfall hast du da, dass das sinn macht?

swordiApps Blog - Website

Antworten