2011-06-03 24 views
9

Mobil kitaplık uygulaması üzerinde çalışıyorum. Ham klasörde depolanmış 3-4 db'lik bir kitap var. Kitabın adını biliyorsanız, önce bu dosyayı /databases/book_name.db dosyasına kopyalayıp gerektiği gibi erişirim. Bu dosyalara erişmek içinAndroid'de ham kaynak tanımlayıcısı dinamik olarak nasıl oluşturulur?

InputStream fileInputStream = getResources().openRawResource(R.raw.book_name); 

'u kullanıyorum.

Şimdi, kitap adını geçmek ve sonra dize book_name kullanılarak kaynak tanımlayıcısı R.raw.book_name dinamik olarak oluşturmak istiyorum. Bu tanımlayıcıyı oluşturabileceğim bir yol var mı?

cevap

17

Kullanım Resources.getIdentifier() yöntemi:

kodunuzu değil aktivite veya uygulamada, önce Bağlam almak gerekir
int resId = getResources().getIdentifier("raw/book_name", null, this.getPackageName()); 

edin.

Context context = getContext(); // or getBaseContext(), or getApplicationContext() 
int resId = getResources().getIdentifier("raw/book_name", null, context.getPackageName()); 
+5

Sadece bir ipucu, örneğin uzantılı bir dosya varsa: '/ ham list_users.json' sonra' .json', basit uzantısı içermez: 'GetResources() getIdentifier (". list_users "," raw "," ") bir numara yap. – divix

+0

@sergeyGlotov bu güzel cevap için teşekkürler +1 –

1

Sergey'in yanıtı temel alınmıştır.

ben edildi kodu ve çalışmış son halini kadar KURU bir CursorAdapter bu kullanıyorum

: Ben daha gibiydi Aşağıda, geçiş böylece Aslında

String attribute = "company_name"; 
String packageName = view.getContext().getPackageName(); 

int resourceId = view.getResources().getIdentifier(attribute, null, packageName); 

, bu bana sorunlara neden oldu kararlı:

int resourceId = R.id.class.getField(attribute).getInt(null); 
İlgili konular