我正在开发一个应用程序,它从数据库中读取每个徽标的资源名称,然后尝试设置drawable。
但是,当我尝试获取徽标的整数标识符时,我在Logcat中得到NumberFormatException
,我的应用程序在应用程序开始时突然强制关闭。
我的代码如下:
String logo;
logo = c.getString(2);
button.setBackgroundResource(Integer.parseInt(logo));
logo
保存在数据库中,例如:R.drawable.logo
你有什么建议吗?
答案 0 :(得分: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");
文件夹下的项目中找到它。
你必须自己解析它。如果你知道它将是一个可以返回的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);