2011-06-03 18 views
9

मैं मोबाइल लाइब्रेरी ऐप पर काम कर रहा हूं। मेरे पास कच्चे फ़ोल्डर में संग्रहीत पुस्तकों की 3-4 डीबी फाइलें हैं I अगर मुझे पुस्तक का नाम पता है तो मैं पहले इस फ़ाइल को /databases/book_name.db पर कॉपी करता हूं और फिर आवश्यकतानुसार उन्हें एक्सेस करता हूं। मैं इन फ़ाइलों तक पहुंचने के लिएएंड्रॉइड में कच्चे संसाधन पहचानकर्ता को गतिशील रूप से कैसे उत्पन्न करें?

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

का उपयोग करता हूं।

अब, मैं पुस्तक का नाम पास करना चाहता हूं और फिर गतिशील रूप से स्ट्रिंग book_name का उपयोग कर संसाधन पहचानकर्ता R.raw.book_name उत्पन्न करना चाहता हूं। क्या कोई तरीका है जिसके द्वारा मैं इस पहचानकर्ता उत्पन्न कर सकता हूं?

उत्तर

17

उपयोग Resources.getIdentifier() विधि:

अपने कोड गतिविधि या आवेदन में, आपको पहले संदर्भ प्राप्त करने की आवश्यकता नहीं
int resId = getResources().getIdentifier("raw/book_name", null, this.getPackageName()); 

हैं।

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

बस एक संकेत है, तो आप एक्सटेंशन वाली फ़ाइल, उदाहरण के लिए, यदि: 'कच्चे/list_users.json' तो विस्तार' .json', सरल शामिल न करें: 'getResources() getIdentifier ("। list_users "," कच्चे "," <अनुप्रयोग पैकेज वर्ग> ") 'एक चाल करें। इस खूबसूरत उत्तर +1 के लिए – divix

+0

@sergeyGlotov धन्यवाद –

5

आप इस सवाल का जवाब मैं यहाँ दिया उपयोग कर सकते हैं: Android: Accessing string.xml using variable name

प्रयास करें:

int identifier = getResources().getIdentifier(bookname, "raw", "<application package class>"); 

संपादित करें: हुंह, अपने कच्चे।

1

सर्गेई के उत्तर के आधार पर।

मैं एक CursorAdapter में यह उपयोग कर रहा हूँ कोड और अंतिम संस्करण है कि काम करने के लिए सूख गया था:

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

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

वास्तव में, यह मुझे समस्याओं के कारण किया गया था तो मैं निम्नलिखित, जो और अधिक लग रहा था पर स्विच स्थिर:

int resourceId = R.id.class.getField(attribute).getInt(null); 
संबंधित मुद्दे