Java 如何以编程方式访问AndroidR.raw类

Java 如何以编程方式访问AndroidR.raw类,java,android,r.java-file,Java,Android,R.java File,我正试图用以下代码读入我的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(is

我正试图用以下代码读入我的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);
    ...
}

问题在于“R.raw.name”,其中name不是被解释为变量,而是被解释为名为“name”的R.raw类的成员。那么,我该如何获取R.raw。[以名称传递的内容]?

首先,我想我应该说,如果您试图以这种方式访问您的资源,您可能是走错了路。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
}

希望这有帮助:)

尝试了这一点并使其发挥了作用,但我将按照您的建议进行一系列单独的调用。如果R类中的变量不是动态的,您可以尝试在应用程序启动时创建一个映射,将字符串名称映射到资源引用。这可能会更有效率:)我一有机会就去试试!为了确保这一点是正确的,我将执行类似以下操作
intid1=R.raw.class.getField(fieldName.getInt(null))
用于
onCreate()
中的每个id,然后在每次需要获取参数时使用该id读取文件?编辑:将所有id存储在字符串到整数映射中时,其中字符串是名称,整数是相应的资源id。同样,除非您没有选择权,否则应避免使用反射。您可以创建一个映射并静态引用来自R的ID,如下所示:myMap.put(“someName”,R.raw.someName);