Resource lesen, nicht Activity

Hallo

Ich moechte gerne in einer XML Datei, Integer Werte speichern um sie später aus einer nicht activity Klasse zu lesen.

Mein Vorgehen:
Ich nutze Eclipse mit Android Plugin.

Ich habe im Ordner values, eine Datei myIntegers.xml erzeugt.

Da rein habe ich dann das hier geschrieben,


<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="hausnummer" type="integer">33</item>
   
</resources>

In der Klasse habe ich das hier versucht.


int x = context.getResources().getInteger(R.integer.hausnummer);
int x = Resources.getSystem().getResourceEntryName(R.integer.hausnummer);
int x =  Resources.getSystem().getInteger(R.integer.hausnummer);


und gefühlte 100 andere variationen die ich per google fand. Leider zeitgt eclipse mir immer an das er hausnummer nicht kennt.
Was mache ich falsch und wie löse ich das Problem? Muss ich die integer.xml irgend wo vorher anmelden?

ich habe nichts davon je ausprobiert aber gebe zum besten (was auch in vielen anderen Situation genauso gilt) :

hast du schon je irgendeinen Ressourcen-Parameter erfolgreich irgendwie gelesen?
wenn nicht, dann besonders vorher sicherstellen, das restliches Grundprogramm mit Debug- und Fehler-Ausgabe halbwegs robust funktioniert

also:
wenn nicht, dann mit Tutorials/ Referenzbeispielen aus dem Internet zu Ressourcen anfangen, einfachstes richtiges Verzeichnis für Ressourcen,
Standard-Dateinamen, einfachst möglich zu definierende Ressourcen (vielleicht kein Integer)

wenn du schon jemals Ressourcen-Parameter hast lesen können, dann auf diesen Stand zurückgehen, nochmal überzeugen ob dieser funktioniert
(wenn auch nicht (mehr), dann genauso Tutorials)

->
kann sein dass auch das aller normalste nicht geht, dann ein Problem für sich, aber zumindest deine individuellen Änderungen wenig irrelevant,
es ist immer leichter über Nichtfunktionieren von Referenzbeispielen zu sprechen

wenn irgendwann der Standard geht, dann behutsam Schritt für Schritt deine Änderungen umsetzen und prüfen ab wann es nicht mehr geht
-> Verzeichnis ‘values’ ein Problem?
-> Dateiname myIntegers.xml oder integer.xml (du nennst zwei verschiedene…) ein Problem?,
vielleicht ist es deine Anmelden-Frage, könnte man bei genauer Feststellung eher besprechen
-> normale Ressourcen gehen in der Datei, aber Integer geht nicht?
-> liegts am Namen ‘hausnummer’?
-> liegt es doch an der Programmstelle, an der versucht wird zu lesen?
usw.
herauszufinden ist: was geht alles, welcher einzelne klare Schritt führt reproduzierbar von vorherigen Funktionieren zu einem Fehler

Hallo

Aus den Activity Klassen heraus funktioniert das einwandfrei. Nur nicht aus einfachen neu erstellen Klassen. Bei R.integer. schlägt er mir ein paar Werte vor aber keine aus meiner XML. Ich kann auch nicht die strings.xml aus einer neuen Klasse auslesen. Aus Activity Klasse geht beides ohne Probleme.

Versuchs mal hiermit:


<?xml version="1.0" encoding="utf-8"?>
<resources>

    <integer name="hausnummer">33</integer>
   
</resources>

Klappt auch nicht, aber das dürft doch auch bei dir nicht klappen,wie kommst du auf das was du gepostet hast? Das klappt nur wenn ich es aus einer Activity Klasse aufrufe…

Ich meine ich kann ja auch nicht auf strings.xml zugreiffen. also an der xml File liegt es nicht. Das teil hat einfach keine Sicht auf die xml Datei.

Wenn ich aus einer Activity Klasse das hier mache getApplicationContext().get Resource… das geht ohne Probleme. Erezuge ich eine neue Klasse und übergebe den Context an den Konstruktor der neuen Klasse, dann kann im Konstruktor der neuen Klasse den getApplicationContext().get Resource… bereits nicht machen.

“aus einer nicht activity Klasse zu lesen” hattest du auch schon geschrieben, hatte ich gar nicht so genau beachtet,

was ist dann eigentlich die context-Variable aus
int x = context.getResources().getInteger(R.integer.hausnummer);
?

konkret zu alldem weiß ich nach wie vor nichts, also nicht zu sehr auf mich hören,
aber im Konglomerat Context übergeben usw. firm?
schau dir etwa diesen Thread an
android - How to get my activity context? - Stack Overflow
ich verstehe es nichtmal wenn ich es lese
(wieso ist dort App im mainfest erwähnt, aber B gibt dann einfach seinen Context weiter…, getApplicationContext() gibts auch noch…),

dennoch in diese Richtung eigenen Stand und evtl. Möglichkeiten prüfen?
oder deine vorhandene Struktur zu Context aufzeigen

Logisch, denn eine Activity ist ein Context. Und von dort kommt die getRessources-Methode. Du benötigst also ein Context-Objekt in deiner Klasse.

… das SO-Beispiel ist auch Mist. Die Idee hinter dem SO-Beispiel ist es, die eigene Application-Klasse als Singleton zu missbrauchen um überall einen Context über die Application-Klasse zu bekommen. Kann man so machen. Ich gebe den Context lieber als Parameter mit.

Puncto Verwirrung: Da Application kein Context sondern ein ContextWrapper ist, geht der Autor anscheinend davon aus, dass er den Context selbst setzen muss. Soweit ich mich erinnern kann, stimmt das aber nicht. Der sollte von Haus aus nicht null sein. (Kann mich aber auch irren.)

@ZickZack : Für dich bedeutet das, dass deine Hilfsklasse alle in etwa so ausschauen müssen:

public class SuperHelper {
  private Context context;

  public SuperHelper(Context context) {
    this.context = context;
  }

  public String getMyResName() {
    return context.getRessources().getString(R.id.myResName);
  }
  
  // etc.
}