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 クラスにあります。リソースへのアクセスはアクティビティの外で制限されているように見えるので、言及したいと思いました。

4

3 に答える 3

1

を使用するつもりだったと思いますc.getDeclaredField(name)。また (これがより「正しい」方法かもしれません)、Resources名前を持っている場合は、オブジェクトを使用して ID を取得できます。この質問/回答を参照してください。

于 2012-04-10T00:18:49.340 に答える
0

残念ながら、実際にはこれを使用して、プレーンJavaクラスからR.javaファイルに含まれるリソースにアクセスすることはできないようです。アクティビティであるクラスにコードをコピーしたとき、例外はスローされず、値が返されました。

于 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 に答える