String in ResourceID umwandeln

  • Antworten:11
  • Bentwortet
Duckemai
  • Forum-Beiträge: 63

01.09.2010, 02:12:23 via Website

Hallo zusammen,

ich würde gerne folgende Zeile in einem App verwenden. Hier wird einfach nur ein Foto(das_bild.jpg) geladen:

final BitmapDrawable bgImage = (BitmapDrawable) this.getResources().getDrawable(R.drawable.das_bild); //das_bild einfügen

Dieses Bild (das_bild) befindet sich im Ordner drawable-hdpi und damit funktioniert die Zeile auch.

ABER: Ich möchte diese Zeile mit einer Variablen befüllen, also statt das_bild zu schreiben, möchte ich hier einen String verwenden, der
als Wert: "das_bild" enthält. Kann mir jemand sagen, wie ich die Programmiercodezeile casten muss, damit sie diesen String verwenden kann?

Vielen Dank
Duckemai

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

01.09.2010, 07:59:02 via Website

Hi Duckemai,

Schau mal in den Thread Variable in "String ID" ("Herkunftsort")?

Um es kurz zu machen, das sollte so gehen:

1id = R.drawable.class.getField("das_bild").getInt(null);

Gruß
Jochen

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

01.09.2010, 11:59:15 via Website

Sorry, das habe ich nicht verstanden.

Ich habe einen String, in dem unterschiedliche Werte auftauchen können, die alle eine RecourceID haben, da es sich um Bilder(namen)
in der drawable-hdpi handelt.

Deinen Quellcode id = R.drawable.class.getField("das_bild").getInt(null); habe ich durch diesen String ergänzt:

String alle_bilder; //Befüllung erfolgt wo anders
id = R.drawable.class.getField(alle_bilder).getInt(null);

Aber wie sieht die Deklaration der id nun aus? Ich brauche ja als Ergebnis etwas, das ich wie eine ResourceID behandeln kann.
Also dass ich in meinem Fall dein "id" hier einbauen kann:
final BitmapDrawable bgImage = (BitmapDrawable) this.getResources().getDrawable(R.drawable.id); //die id in R.drawable aufrufen

Wie mache ich denn das?

Vielen Dank
Duckemai

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

01.09.2010, 12:06:01 via Website

Nur so am Rande ... FINAL kann im nachhinein nicht mehr verändert werden!

Um mit den Worten der Java definition zu sprechen:
A final variable can only be assigned once

— geändert am 01.09.2010, 12:06:40

lg Voss

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

01.09.2010, 12:16:53 via Website

Das final ist nur versehentlich reingerutscht und hat mit meinem eigentlichen Problem ja nichts zu tun.
Aber Danke für die Aufmerksamkeit!

PS: So stelle ich mir tatsächlich eine (Android) Gottheit vor. Genüßlich beobachtend und leiden lassen :grin:

— geändert am 01.09.2010, 12:25:53

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

01.09.2010, 12:24:14 via Website

Hi Duckemai,

also um das ganze mal aufzudröseln.
Das sollte so funktionieren:

1String bild = "icon";
2int id = R.drawable.class.getField(bild).getInt(null);
3BitmapDrawable bgImage = (BitmapDrawable) this.getResources().getDrawable(id);

Kann das ganze nicht ausprobieren, also unter Vorbehalt.

Gruß
Jochen

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

01.09.2010, 12:59:51 via Website

Huuuuuuurrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaa!

Es funktioniert. Jochen, Goldjunge.

Da sitze ich schon ewig an dieser Geschichte und jetzt klappt es.

Mir fehlen einfach noch die Grundlagen Android (vor allem, wenn es um Resourcen geht).
Leider habe ich nur 2 schlechte Bücher zu Android und die Internet-Tutorials behandeln meist nur so Hello-World Geschichten
oder "Mein erstes eigenes Activity".

Vielen, vielen Dank!!!

Antworten
Matze Klein
  • Forum-Beiträge: 4

22.09.2010, 21:29:04 via Website

Hallo zusammen,

ich hätte da auch mal ne Frage zu. Bei dieser Zeile meckert Eclipse rum:

1int id = R.drawable.class.getField(bild).getInt(null);

"Unhandled exception type NoSuchFieldException"

Da ich noch blutiger Anfänger bin kann ich damit nichts anfangen, ich wüsste gerne was das bedeutet :wacko:

Gruß Matze

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

22.09.2010, 21:38:30 via Website

Hi Matze,

anscheinend gibt es in der Klasse R.drawable kein Feld mit dem Namen, der in der Variablen bild enthalten ist.
Schau mal innerhalb des gen Ordners Deines Projektes nach. Unterhalb des Paketnamens befindet sich die Klasse R.java.
In dieser muss das Feld definiert sein, sonst funktioniert das nicht.

Ein Eintrag kann zum Beispiel so aussehen (icon ist hierbei der Feldname):
1public static final int icon=0x7f020000;

Gruß
Jochen

Antworten
Matze Klein
  • Forum-Beiträge: 4

22.09.2010, 22:18:32 via Website

Hallo Jochen,

das ging ja schnell, aber Danke für Deine prompte Antwort.

Das Feld gibt es scheinbar:

1...
2public static final class drawable {
3 public static final int alphaa1=0x7f020000;
4...

trotzdem meckert Eclipse

1...
2String bcode = "alphaa1";
3int id = R.drawable.class.getField(bcode).getInt(null);
4...

ich vergaß zu schreiben, daß der Code in try/catch funktioniert. Aber trotzdem wollte ich Ursache der Fehlermeldung ergründen um den Code ohne try/catch u laufen zu lassen.

Gruß Matze

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

22.09.2010, 22:29:19 via Website

Hi Matze,

hatte das nicht richtig gelesen.
Den try/catch Block brauchst Du weil getField() folgendermaßen definiert ist:
1public Field getField(String name) throws NoSuchFieldException, SecurityException

Gruß
Jochen

Antworten
Matze Klein
  • Forum-Beiträge: 4

23.09.2010, 07:48:36 via Website

Hallo Jochen,

danke für den Hinweis, jetzt bin etwas schlauer :D .

Naja ich muß wohl noch viel lernen :cold:.

Gruß Matze

Antworten