使用getField访问资源

时间:2012-04-09 22:14:34

标签: android

当我尝试在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。我想我之所以提到,因为在活动之外对资源的访问似乎受到限制。

3 个答案:

答案 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类中时,它没有抛出异常并返回一个值。