2013-04-17 10 views
14

मैं एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट का निर्माण कर रहा हूं जिसके लिए आंतरिक रूप से कुछ स्थिर संसाधन (छवियों/एक्सएमएल और आदि) की आवश्यकता है।एंड्रॉइड लाइब्रेरी प्रोजेक्ट में संसाधनों का उपयोग कैसे करें

तब मुझे आश्चर्य है कि मैं इन संसाधनों को कहां रख सकता हूं और उन्हें कैसे एक्सेस कर सकता हूं?

चूंकि मैंने संसाधनों को assets फ़ोल्डर में रखा है। और मैं संसाधनों का उपयोग करने AssetManager का उपयोग करें: W/System.err(19583): java.io.FileNotFoundException: t.jpg

समस्या क्या है:

public class DataProvider { 
    byte[] getDrawableData(int num) { 
     AssetManager am = Resources.getSystem().getAssets(); 
     InputStream is = null; 
     try { 
      is = am.open("t.jpg"); 
     } catch (IOException e) { 
      return "".getBytes(); 
     } 
     if (is != null) { 
      Drawable dw = Drawable.createFromStream(is, null); 
      Bitmap bm = ((BitmapDrawable) dw).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      return stream.toByteArray(); 
     } 

     return "".getBytes(); 
    } 
} 

हालांकि मैं त्रुटि मिल गया?


Sankar V के रूप में कहा पुस्तकालय परियोजना कच्चे संपत्ति का समर्थन नहीं करता। तो ऐसा लगता है कि मुझे res फ़ोल्डर के तहत पुनर्जन्म देना है।

लेकिन मैंने Resources.getSystem().getResources().... विधि का उपयोग करने का प्रयास किया है जो मैं चाहता हूं कि प्राप्त नहीं कर सकता। और लोगों ने कहा कि यह विधि केवल आवेदन स्तर संसाधनों के बजाय सिस्टम स्तर संसाधन प्राप्त कर सकती है।

यदि यह सच है। क्या इसका मतलब यह है कि मुझे कहीं भी Context ऑब्जेक्ट का संदर्भ रखना है, जहां भी मैं कोई संसाधन प्राप्त करना चाहता हूं?

+0

क्या आपने लिंक को पूरी तरह से चेक किया है जिसे मैंने समाधान के रूप में प्रदान किया था। यह कहता है "हां आप कर सकते हैं अगर आप अपनी लाइब्रेरी का पैकेज नाम जानते हैं" और एक कामकाजी समाधान है। –

+0

मैंने पोस्ट पढ़ा। लेकिन मैं 'संदर्भ' ऑब्जेक्ट तक नहीं पहुंच सकता, इसलिए मैं 'getResources() ....' को कॉल नहीं कर सकता। – hguser

+0

मैं यह पुष्टि करना चाहता हूं कि क्लास डेटाप्रोवाइडर कहां रहता है? लाइब्रेरी प्रोजेक्ट में या एप्लिकेशन प्रोजेक्ट में –

उत्तर

7

तब मुझे आश्चर्य है कि मैं इन संसाधनों को कहां रख सकता हूं और उन्हें कैसे एक्सेस कर सकता हूं?

एंड्रॉयड डॉक्टर

लाइब्रेरी परियोजनाओं से कच्चे संपत्ति

शामिल नहीं कर सकते उपकरण (संपत्ति/निर्देशिका में बचाया) एक पुस्तकालय परियोजना में कच्चे संपत्ति फ़ाइलों के उपयोग का समर्थन नहीं करते। किसी एप्लिकेशन द्वारा उपयोग किए जाने वाले किसी भी संपत्ति संसाधन को एप्लिकेशन प्रोजेक्ट की संपत्ति/निर्देशिका में ही संग्रहीत किया जाना चाहिए। हालांकि, res/निर्देशिका में सहेजी गई संसाधन फ़ाइलें समर्थित हैं।

डॉक्स संदर्भ लिंक:LibraryProjects

समाधान:How to access resource files saved in res/ directory of library project from application project

नोट: आप लाइब्रेरी प्रोजेक्ट से ही संसाधनों का उपयोग करने assets में नहीं res/ directory लिए संसाधनों को जोड़ने चाहते हैं। क्योंकि संपत्तियों में फ़ाइलों को .jar फ़ाइल के साथ बंडल नहीं किया जाएगा। R.java फ़ाइल में उत्पन्न संदर्भ का उपयोग करके आप इसे सामान्य रूप से एक्सेस कर सकते हैं।

पूर्व: drawable उपयोग

R.drawable.image_name 

से एक छवि का उपयोग करने के लिए यह मतलब है मैं संदर्भ वस्तु कहीं भी मैं किसी भी संसाधन प्राप्त करना चाहते हैं के लिए एक संदर्भ पकड़ करने के लिए है?

वास्तव में आप संसाधनों

उपयोग करने के लिए संदर्भ के लिए एक संदर्भ धारण करना चाहिए

अद्यतन: जो आप संसाधन बंडल करने की अनुमति देता है

अब Android पुस्तकालय परियोजना आर के रूप में उत्पन्न किया जा सकता (एंड्रॉयड पुरालेख) फ़ाइल पुराने जार (जावा आर्काइव) फ़ाइल की बजाय लाइब्रेरी प्रोजेक्ट के लिए आवश्यक फाइलें जो आपको केवल जावा कक्षाओं को बंडल करने की अनुमति देती हैं।

+0

शंकर: आप कहते हैं कि 'लाइब्रेरी परियोजनाओं में कच्चे संपत्ति शामिल नहीं हो सकते हैं'। लेकिन मैंने कुछ तृतीय-पक्ष लाइब्रेरी का उपयोग किया है जो कक्षाओं और संपत्ति फ़ोल्डर को एकसाथ पैकेज करते हैं। समस्या क्या है? – hguser

+0

क्या मुझे पता है कि तीसरी पार्टी लाइब्रेरी क्या है? –

+0

यह एक एंड्रॉइड एसडीके है। यह स्क्रीनशॉट देखें: http: //i.imgur.com/7I6aq1D.png। – hguser

0

या आप ग्रहण में एक लिंक किए गए फ़ोल्डर का उपयोग कर सकते हैं, और अपनी संपत्ति फ़ोल्डर को अपनी नई परियोजना में जोड़ सकते हैं।

+0

यह ग्रहण में शायद मदद करता है और एंड्रॉइड स्टूडियो में नहीं, जिसे अब एक दिन पसंद किया जाना चाहिए। लेकिन मुझे विश्वास नहीं है कि इससे ग्रहण में भी मदद मिलेगी क्योंकि प्रोजेक्ट बनने पर लिंक किए गए फ़ोल्डर्स लिंक नहीं करते हैं –

संबंधित मुद्दे

 संबंधित मुद्दे