0

次のコードを使用して、 res/raw ディレクトリにあるテキスト ファイルを読み込もうとしています。

public String fetchParam(String name, int index){
    InputStream is = getResources().openRawResource(R.raw.name);
    InputStreamReader isreader = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isreader);
    ...
}

問題は、名前が変数として解釈されず、「name」と呼ばれる R.raw クラスのメンバーとして解釈される「R.raw.name」にあります。では、R.raw.[名前として渡されるものは何でも] を取得するにはどうすればよいですか?

4

1 に答える 1

2

まず、このようにリソースにアクセスしようとしている場合は、おそらく間違った方法でアクセスしようとしていると言わなければなりません。通常、R クラスはこのように使用するべきではありません。

ただし、やろうとしていることを本当に実行する必要がある場合は、リフレクションを使用できます。注: これは多くのオーバーヘッドを使用し、頻繁に使用するとアプリケーションの速度が低下するため、お勧めしません。

コードサンプルは次のとおりです。

try
{
    int itemId = R.raw.class.getField(name).getInt(null);
    InputStream is = getResources().openRawResource(itemId);
    InputStreamReader isreader = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isreader);
} 
catch (NoSuchFieldException ex)
{
    // Handle
}
catch (IllegalAccessException ex)
{
    // Handle
}

お役に立てれば :)

于 2013-10-21T00:52:16.987 に答える