2013-03-13 11 views
5

Zajmuję się tworzeniem aplikacji, która odczytuje nazwę zasobu każdego logo z bazy danych, a następnie próbuje ustawić rysunki.Uzyskaj identyfikator zasobu od nazwy

Jednak otrzymuję NumberFormatException w moim Logcat, gdy próbuję uzyskać identyfikator liczby całkowitej logo i moja aplikacja nagle wymusza zamknięcie na początku aplikacji.

Mój kod wygląda następująco:

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

logo jest zapisany w bazie danych, jak na przykład: R.drawable.logo

Czy masz jakieś sugestie co jest nie tak tutaj?

Odpowiedz

2

Jeżeli wartość logo jest "R.drawable.logo" (a String), to nie może być analizowany na int. R.drawable.logo jest w rzeczywistości odniesieniem do zmiennej static int logo w static class drawable, która jest podklasą wygenerowanej klasy zasobów R. R to wygenerowana klasa zasobów, którą można znaleźć w projekcie w folderze gen.

Musisz sam je przeanalizować. Jeśli wiesz, że to jest odkształcalne, które zostaną zwrócone, trzeba zrobić coś takiego:

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

Alternatywnie, można podzielić go na funkcję:

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

dziękuję, zadziałało to dla mnie! –

0

Spróbuj

String logo=c.getString(2); 

Pobierz rozciągliwej nazwisko, nie potrzebuje R.drawable więc usunięcie ich podziału.

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

Trzeci parametr to nazwa pakietu

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

button.setBackgroundResource(drawableId); 
+0

dzięki, mam problem w linia logo = logo.split (.) [2] ;. możesz o tym wyjaśnić? –

+0

Dzięki za pomoc ..... –

+0

Problem z podziałem wynika z tego, że kropka powinna być podana jako ciąg. Ponadto, ponieważ jest to wyrażenie regularne, powinno być uniknięte jako znak specjalny. Jednakże, ponieważ odwrotny ukośnik jest również znakiem ucieczki java, to również trzeba uciec. Powinno być "\\.". – Shade

Powiązane problemy