2013-10-21 74 views
0

我想在一個文本文件閱讀我的資源與這麼一個小節目的代碼/ raw目錄:如何訪問Android的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類通常不應該以這種方式使用。

但是,如果你真的需要做你想做的事情,你可以使用反射。注意:這是不推薦的,因爲它使用了大量的開銷,並且如果經常使用,它會減慢你的應用程序。

下面是一個代碼示例:

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 
} 

希望這有助於:)

+0

嘗試這樣做,得到它的工作,但我會通過你的建議去只是讓十幾個人來電 –

+1

自您的R類中的變量不是動態的,您可以嘗試在應用程序啓動時將Map 映射到資源引用。這可能會更有效率:) –

+0

只要我有機會,我會盡快給它!只是爲了確保我有這個權利,我會爲'onCreate()'中的每個id做'int id1 = R.raw.class.getField(fieldName).getInt(null);''然後使用每次需要讀取參數時讀取文件?編輯:雖然存儲在一個字符串中的所有id到int映射,其中字符串是名稱和int相應的資源ID。 –