2012-09-12 12 views
14

मेरे पास एंड्रॉइड प्रोजेक्ट (com.appocaliptic.quizknife.app) है जो एंड्रॉइड लाइब्रेरी (com.appocaliptic.quizknife.core) का उपयोग करता है।एंड्रॉइड - getIdentifier हमेशा 0 (लाइब्रेरी + एप्लिकेशन)

जो मैं करने की कोशिश कर रहा हूं, वह पुस्तकालय है जो चित्र की संसाधन आईडी प्राप्त करना है। छवि के लिए पथ है: res/drawable-xhdpi/fr_200_133.png

हालांकि, सभी getIdentifier परिणाम 0 के साथ प्रयास करता है। समस्या कहां है?

resId = getResources().getIdentifier("fr_200_133", "drawable", "com.appocaliptic.quizknife.core"); 
resId = getResources().getIdentifier("com.appocaliptic.quizknife.core:drawable/"+"fr_200_133", null, null); 
resId = getResources().getIdentifier("drawable/fr_200_133", null, "com.appocaliptic.quizknife.core"); 

संपादित:

आक, और R.java में drawable और corensponding विशेषता होती है।

+0

क्या सिस्टम जिस पर आप परीक्षण कर रहे हैं उस पर xhdpi रिज़ॉल्यूशन वाला स्क्रीन है? – Squonk

+1

@Squonk - आईडी को पुनर्प्राप्त करने की बात आने पर इससे कोई फर्क नहीं पड़ता; आईडी के साथ जुड़े ड्रॉबल को पुनः प्राप्त करने में ही। इसके अलावा, आकर्षित करने योग्य संसाधनों के लिए, सिस्टम [सर्वश्रेष्ठ मिलान] (http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch) मिलेगा, इसलिए यह xhdpi संसाधन का उपयोग करेगा (बाद में स्केलिंग) यहां तक ​​कि एक एलडीपीआई डिवाइस पर भी। –

+0

@ टेडहोप: हाँ सहमत - मैं आकर्षित करने योग्य संसाधनों के लिए सबसे अच्छे मैच के बारे में भूल गया। – Squonk

उत्तर

26

आपको लाइब्रेरी पैकेज नाम का उपयोग नहीं करना चाहिए। (अगर यह एक दृश्य में निष्पादित हो रहा है या getContext().getPackageName())

resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName()); 

: बजाय इस कोशिश करो।

+0

वाह, यह O_o काम करता है। बहुत बहुत धन्यवाद - बीटीडब्ल्यू - इस जानकारी का कोई स्रोत? मेरे द्वारा प्राप्त सभी संसाधन वे स्ट्रिंग पैकेज नाम का उपयोग करने का सुझाव दे रहे थे। धन्यवाद। – bluszcz

+2

@bluszcz - मुझे लगता है कि मैंने कहीं उस उदाहरण से उस मुहावरे को उठाया है। कुंजी यह है कि आपको लाइब्रेरी के पैकेज नाम के बजाय ऐप के पैकेज नाम (जैसा कि मैनिफेस्ट में सूचीबद्ध है) का उपयोग करने की आवश्यकता है (जो ऐप बनाने के दौरान वास्तव में गायब हो जाता है)। –

+0

मुझे विश्वास है कि आपको उत्तर के साथ अपनी टिप्पणी पोस्ट करनी चाहिए - यह बहुत महत्वपूर्ण जानकारी है;) – bluszcz

27

मैं एक ही समस्या का सामना करना पड़ा: "getIdentifier परिणाम 0" और मैं इसे छवि एक्सटेंशन (* .jpg, * .jpeg, ... आदि) को बाहर निकालने में यह के रूप में नाम से मेल होने के लिए आर द्वारा हल जावा फ़ाइल

10

मैं एक ही त्रुटि और केवल एक चीज है कि काम एक अलग तरीके से इसके बारे में जा रहा था हो रही थी:

resourceId = R.drawable.class.getField("fr_200_133").getInt(null); 
1

मैं एक ऐसी ही समस्या हुई। मैं इसे हुसम ओट्री के उल्लेख के समान हल कर सकता हूं। उदाहरण के लिए:

//This doesn't work 
context.getResources().getIdentifier("audio_1.mp3", "raw", this.getPackageName()); 

//This works (strip off the file extension) 
context.getResources().getIdentifier("audio_1", "raw", this.getPackageName()); 
संबंधित मुद्दे