2013-04-26 21 views
1
InputStream inputStream = getResources().openRawResource(R.raw.ac); 

這裏,ac是來自res/raw的恆定文件名。如何將Int轉換爲res/raw的常量?

int books = cursor.getColumnIndexOrThrow(DictionaryDatabase.BOOK_DETAILS) 

是一個int包含名稱:ac也。

是否有可能使用

InputStream inputStream = getResources().openRawResource詮釋書籍); ???

如果是的話怎麼樣?

+0

遊標通常是一些SQL數據庫的問題。你試圖做的是從數據庫中讀取書籍,但它的方式不對。 DB不是「res/raw中的常量文件名」。此外,DB的表名和它的字段名通常是相應類定義中的公共靜態字符串。這就是爲什麼DictionaryDatabase.BOOK_DETAILS的作品,它只是一個列的名字 – Stan 2013-04-26 13:23:35

+0

@Stan:你是對的。這裏int books是一個遊標,使用搜索從SQL中獲取文件的名稱。當用戶搜索Apple時,此遊標將返回與res/raw上保存的名稱完全相同的ac。我在想如果有什麼辦法可以用這個int來打開res/raw文件 – netmaster 2013-04-26 13:31:53

回答

1

如果我理解正確,您希望在變量中獲得名稱爲xxxxR.raw.xxxx字段的值。這可以用這樣的代碼來實現:

String resName = "mybook"; 
int resID = context.getResources().getIdentifier(resName, "raw", context.getPackageName()); 
InputStream inputStream = getResources().openRawResource(resId); 

這裏,context是在你的應用程序Context一個實例,一個活動,這將是this

+0

@ Aleks G:實際上沒有。我想從cursor.getColumnIndexOrThrow(DictionaryDatabase.BOOK_DETAILS)而不是fromcontext.getResources()得到resId getIdentifier – netmaster 2013-04-26 13:20:07

+0

@netmaster然後我不明白是什麼問題。這裏唯一要記住的是,'R.raw'中的實際值是在構建過程中定義的(並且可能在重建時更改),因此在應用程序運行之前不能依賴它們。因此,在你的數據庫輔助類的構造函數或'onCreate'(和'onUpgrade')中,你需要將這些值保存到數據庫中。同時,如我所示,通過簡單地保存資源名稱並在運行時獲取ID,您可以節省很多痛苦。 – 2013-04-26 13:20:45

+0

@ Aleks G:實際上,int書是一個使用搜索從SQL獲取文件名的遊標。當用戶搜索Apple時,此遊標將返回與res/raw上保存的名稱完全相同的ac。我在想如果有什麼辦法可以使用int來從res/raw打開文件。但似乎這是不可能的,我是對的嗎? – netmaster 2013-04-26 13:33:23