5

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

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

我的代码如下:

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

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

您有什么建议吗?

4

2 回答 2

2

如果 的值为logo( "R.drawable.logo"a String),则无法解析为int. R.drawable.logo 实际上是对 中的static int logo变量的引用static class drawable,它是生成的资源类的子类RR是一个生成的资源类,你可以在你的项目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);
}
于 2013-03-13T11:36:17.823 回答
0

试试这个

String logo=c.getString(2);

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

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

第三个参数是你的包名

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

button.setBackgroundResource(drawableId);
于 2013-03-13T11:34:00.340 回答