2013-10-21 3 views
0
내 입술에 텍스트 파일에이 코드 재미있는 이야기와/원시 디렉토리를 읽으려고

는 :은 안드로이드 R.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를 가져 오는 방법은 무엇입니까?

답변

1

첫 번째로, 나는 이와 같이 리소스에 액세스하려고한다면 아마도 잘못된 방향으로 가고 있다고 말할 수 있습니다. R 클래스는 일반적으로 이런 식으로 사용하면 안됩니다.

그러나 실제로 수행하려는 작업이 필요한 경우 리플렉션을 사용할 수 있습니다. 참고 : 많은 오버 헤드를 사용하고 자주 사용하면 응용 프로그램이 느려지므로 권장하지 않습니다. 여기

은 코드 예제입니다 :이 :)

+0

이를 시도하고 일을하는 데 도움이

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 } 

희망,하지만 난 당신의 조언으로 가서 간단하게 다스 개인이 때문에 –

+1

를 호출 할 수 있습니다 R 클래스의 변수가 동적이 아니므로 문자열 이름을 리소스 참조에 매핑하는 응용 프로그램 시작시 Map 을 만들 수 있습니다. 이것은 아마도 훨씬 더 효율적 일 것입니다 :) –

+0

기회를 얻 자마자 나는 그것을 줄 것이다! 이 권한이 있는지 확인하기 위해'onCreate()'의 모든 ID에 대해 다음과 같이 'int id1 = R.raw.class.getField (fieldName) .getInt (null);' 매개 변수를 가져올 때마다 파일을 읽으시겠습니까? 편집 : 모든 문자열의 ID를 int 맵에 저장하는 동안 문자열은 이름이고 int는 해당 리소스 ID입니다. –

관련 문제