从名称获取资源标识符

时间:2013-03-13 11:28:17

标签: android

我正在开发一个应用程序,它从数据库中读取每个徽标的资源名称,然后尝试设置drawable。

但是,当我尝试获取徽标的整数标识符时,我在Logcat中得到NumberFormatException,我的应用程序在应用程序开始时突然强制关闭。

我的代码如下:

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

logo保存在数据库中,例如:R.drawable.logo

你有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果logo的值为"R.drawable.logo"String),则无法将其解析为int。 R.drawable.logo实际上是static int logostatic class drawable变量的引用,R是生成的资源类R的子类。 gen是生成的资源类,您可以在String logoParts [] = logo.split ("\\."); int logoId = getResources ().getIdentifier (logoParts [logoParts.length - 1], "drawable", "com.example.app"); 文件夹下的项目中找到它。

你必须自己解析它。如果你知道它将是一个可以返回的drawable,你必须做类似的事情:

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

或者,您可以将其分成一个函数:

{{1}}

答案 1 :(得分:0)

试试这个

String logo=c.getString(2);

获取您的可绘制名称,不需要R.drawable,因此可以通过拆分来删除它们。

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

第三个参数是您的包名称

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

button.setBackgroundResource(drawableId);