2013-03-13 11 views
5

Ich entwickle eine Anwendung, die den Ressourcennamen jedes Logos aus der Datenbank liest und dann versucht, die Zeichen zu setzen.Get ressourcenkennung von name

Allerdings bekomme ich eine NumberFormatException in meinem Logcat, wenn ich versuche, die ganzzahlige Kennung des Logos zu erhalten und meine Anwendung plötzlich am Anfang der Anwendung erzwingt.

Mein Code ist wie folgt:

String logo; 
logo = c.getString(2); 
button.setBackgroundResource(Integer.parseInt(logo)); 

logo wird in der Datenbank als zum Beispiel gespeichert: R.drawable.logo

Haben Sie einen Vorschlag, was hier schief geht?

Antwort

2

Wenn der Wert von logo ist "R.drawable.logo" (a String), dann ist das nicht zu int analysiert werden. R.drawable.logo ist eigentlich eine Referenz auf die static int logo Variable in der static class drawable, die eine Unterklasse der generierten Ressourcen Klasse R ist. R ist eine generierte Ressourcenklasse, die Sie in Ihrem Projekt unter dem Ordner gen finden.

Sie müssen es selbst analysieren. Wenn Sie wissen, dass es ein ziehbar ist, die zurückgegeben werden, haben Sie so etwas wie zu tun:

String logoParts [] = logo.split ("\\."); 
int logoId = getResources().getIdentifier (logoParts [logoParts.length - 1], "drawable", "com.example.app"); 

Alternativ Sie es in eine Funktion trennen kann:

public static int parseResourceString (Stinrg resString, String package) { 
    String resParts [] = resString.split ("\\."); 
    return getResources().getIdentifier (resParts [resParts.length - 1], resParts [resParts.length - 2], package); 
} 
+0

danke, es hat für mich funktioniert! –

0

Versuchen Sie, diese

String logo=c.getString(2); 

Ihre ziehbar Name Erhalten, keine Notwendigkeit von R.drawable so sie durch Spaltung zu entfernen.

logo=logo.split("\\.")[2]; 

dritter Parameter ist Ihr Paketname

int drawableId = getResources().getIdentifier(logo, "drawable", "com.mypackage.myapp"); 

button.setBackgroundResource(drawableId); 
+0

Dank, bekomme ich ein Problem in der Linienlogo = logo.split (.) [2] ;. Kannst du es erklären? –

+0

Danke für Ihre Hilfe ..... –

+0

Das Problem mit der Aufteilung ist, weil der Punkt als eine Zeichenfolge bereitgestellt werden soll. Da dies ein regulärer Ausdruck ist, sollte er als Sonderzeichen ausgeblendet werden. Da der Backslash aber auch ein Java-Escape-Zeichen ist, muss auch dieser entschlüsselt werden. Es sollte sein "\\.". – Shade