Android 从名称获取资源标识符

Android 从名称获取资源标识符,android,Android,我正在开发一个应用程序,它从数据库中读取每个徽标的资源名称,然后尝试设置可绘图项 但是,当我尝试获取徽标的整数标识符时,我的Logcat中出现了一个NumberFormatException,我的应用程序在应用程序开始时突然强制关闭 我的代码如下: String logo; logo = c.getString(2); button.setBackgroundResource(Integer.parseInt(logo)); logo保存在数据库中,例如:R.drawable.logo 你有什

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

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

我的代码如下:

String logo;
logo = c.getString(2);
button.setBackgroundResource(Integer.parseInt(logo));
logo
保存在数据库中,例如:
R.drawable.logo

你有什么建议吗?

试试这个

String logo=c.getString(2);
获取您的可绘制名称,不需要R.drawable,因此通过拆分将其删除

logo=logo.split("\\.")[2];
第三个参数是包名

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

button.setBackgroundResource(drawableId);

如果
logo
的值是
“R.drawable.logo”
(一个
字符串
),则无法将其解析为
int
。R.drawable.logo实际上是对
静态类drawable
中的
静态int logo
变量的引用,该变量是生成的资源类
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);
}

谢谢,我在logo=logo.split(.[2];)行中遇到问题;。你能解释一下吗?拆分的问题是因为点应该作为字符串提供。此外,由于这是一个正则表达式,因此应将其作为特殊字符转义。但是,由于反斜杠也是java转义字符,因此也必须转义。它应该是“\\。”@Shade是的,我没有在任何java编辑器中键入它,所以我错过了它