当我尝试在Android应用程序中获取资源字段时,我收到异常。这似乎是访问drawable id的正确方法。有什么建议可能是错的吗?
04-09 22:45:59.816: W/System.err(5014): java.lang.NoSuchFieldException: lumiere
在我的res / drawable文件夹中,我有“lumiere.jpg”。来自R.java:
public static final class drawable {
[...]
public static final int lumiere=0x7f02000a;
方法调用:
Class c = R.drawable.class;
field = c.getField(name);
i = new Integer(field.getInt(null));
我不认为这很重要,作为一个静态类方法调用,但以防万一 - 上面的代码是在一个普通的Java类中,而不是一个Activity。我想我之所以提到,因为在活动之外对资源的访问似乎受到限制。
答案 0 :(得分:0)
我认为在调用 getInt 方法时需要提供类的对象:
Integer i = null;
try {
Class c = R.drawable.class;
Field field = c.getField(name);
if(field != null){
i = new Integer(field.getInt(c)); //provide 'c' in getInt
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
阅读this帖子
答案 1 :(得分:0)
我相信您打算使用c.getDeclaredField(name)
。此外(这可能是更“正确”的方式),您可以使用Resources
对象获取名称时的ID。请参阅this question/answer。
答案 2 :(得分:0)
不幸的是,您实际上似乎无法使用它来从普通Java类访问R.java文件中包含的资源。当我将代码复制到一个Activity类中时,它没有抛出异常并返回一个值。