Java 如何以编程方式访问AndroidR.raw类
我正试图用以下代码读入我的res/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
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);