2013-03-13 5 views
5

Я разрабатываю приложение, которое считывает имя ресурса каждого логотипа из базы данных и затем пытается установить чертежи.Получить идентификатор ресурса от имени

Однако в моем Logcat я получаю , когда пытаюсь получить целочисленный идентификатор логотипа, а приложение внезапно принудительно закрывается в начале приложения.

Мой код выглядит следующим образом:

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

logo сохраняется в базе данных, как, например: R.drawable.logo

У вас есть предложение, что идет не так?

ответ

2

пакет Если значение logo является "R.drawable.logo"String), то это не может быть разобрано на int. R.drawable.logo на самом деле является ссылкой на переменную static int logo в static class drawable, которая является подклассом класса сгенерированных ресурсов R. R - это сгенерированный класс ресурсов, который вы можете найти в своем проекте под папкой gen.

Вы должны разобрать его самостоятельно. Если вы знаете, что это вытяжка, который будет возвращен, вы должны сделать что-то вроде:

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

В качестве альтернативы, вы можете разделить его в функцию:

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

спасибо, это сработало для меня! –

0

Попробуйте

String logo=c.getString(2); 

Получите Drawable имя, нет необходимости в R.drawable так извлекая их расщепления.

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

Третий параметр ваше имя

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

button.setBackgroundResource(drawableId); 
+0

спасибо, я получаю проблемы в line logo = logo.split (.) [2] ;. можете ли вы объяснить об этом? –

+0

Спасибо за помощь ..... –

+0

Проблема с разделом состоит в том, что точка должна быть представлена ​​в виде строки. Кроме того, поскольку это регулярное выражение, оно должно быть экранировано как особый символ. Однако, поскольку обратная косая черта также является символом escape-функции java, это также должно быть экранировано. Должен быть "\\.". – Shade

Смежные вопросы