2

当我尝试在 Android 应用程序中获取资源字段时收到异常。这似乎是访问可绘制 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。只是想我会提到,因为对资源的访问似乎在活动之外受到限制。

4

3 回答 3

1

我相信你的意思是使用c.getDeclaredField(name). 此外(这可能是更“正确”的方法),Resources当你有名字时,你可以使用对象来获取 ID。请参阅此问题/答案

于 2012-04-10T00:18:49.340 回答
0

不幸的是,您实际上似乎无法使用它从普通 Java 类访问 R.java 文件中包含的资源。当我将代码复制到一个 Activity 类中时,它没有抛出异常并返回了一个值。

于 2012-04-10T21:09:48.553 回答
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();
    }

阅读这篇文章

于 2012-04-09T22:36:06.050 回答