2009-10-09 26 views
11

मैं एक गतिविधि में निम्न पंक्ति, जो एक ही आवेदन के भीतर है चल रहा हूँ, लेकिन एक अलग पैकेज में:एंड्रॉयड: this.getApplication() रिटर्न शून्य सूचक

AppObject appObj = (AppObject)this.getApplication(); 
// FYI: AppObject is my extension class of Application. 

यह केवल एक नल पॉइंटर रिटर्न , जबकि जब मैं इसे "मुख्य" पैकेज में ले जाता हूं और इसे वहां से चलाता हूं तो यह अपेक्षित रूप से एप्लिकेशन संदर्भ देता है।

मैं, पूर्ण योग्य वर्ग के नाम के साथ अपने AndroidManifest.xml में गतिविधि परिभाषित किया है, क्योंकि यह एक और पैकेज में है: <activity android:name="com.foo.bar.TestActivity"></activity>

मैं क्या अलग करना है की कोई भी विचार?

धन्यवाद


अद्यतन:android:name="AppObject" नीचे एक प्रश्न में सुझाव दिया जैसा कि पहले ही AndroidManifest.xml

उत्तर

4

आप के साथ AndroidManifest.xml को अद्यतन आवेदन टैग की जरूरत के <application> टैग में था अपने कक्षा का नाम, जिसे उचित पैकेज नाम के साथ, एप्लिकेशन से बढ़ाया गया है।

<application android:name=".AppObject"> 


प्रति आवेदन टैग गूगल डॉक्स, जो उन लोगों के वैश्विक आवेदन राज्य बनाए रखने की जरूरत के लिए बेस वर्ग के रूप में। आप अपने एंड्रॉइडManifest.xml के टैग में अपना नाम निर्दिष्ट करके अपना स्वयं का कार्यान्वयन प्रदान कर सकते हैं, जिससे आपके क्लास/पैकेज के लिए प्रक्रिया बनाई जाने पर उस कक्षा को आपके लिए तत्काल चालू किया जाएगा।

here

+1

क्षमा करें, मैं अपने प्रश्न में उल्लेख करना भूल गया। लेकिन मेरे पास पहले से ही मेरे मैनिफेस्ट में है। – znq

1

बस, एक ही बात में चलाने पुनर्संशोधित होने मेरे सारे कोड अब भी वही मुद्दा मिल गया, देखा कि मैं निर्माता में स्थानीय mApplication चर स्थापित करने गया था, यह onCreate() में जाना चाहिए, मुझे लगता है मेनिफेस्ट में सभी ऑब्जेक्ट्स का निर्माण getApplication() से पहले किया जा सकता है, इसलिए को onCreate() में या उसके बाद कॉल करने की आवश्यकता है। यह देखने के लिए कि क्या यह विभिन्न पैकेजों (श्वास) के लिए काम करता है, फिर से मेरे सभी कोड को फिर से दोबारा नहीं बदला है।

20

गतिविधि के onCreate() विधि में getApllication() पर कॉल करना महत्वपूर्ण है, कन्स्ट्रक्टर में नहीं।

+0

दस्तावेज में उल्लेख नहीं किया गया बहुत महत्वपूर्ण बिंदु। आपका बहुत बहुत धन्यवाद! – Stan

+0

दिलचस्प बात यह है कि यह कॉलिंग प्राप्त करने से पहले आवेदन करें एक सहकर्मी के लिए काम करना प्रतीत होता है बस सैमसंग गैलेक्सी नोट 3 पर ठीक है, लेकिन मेरे नेक्सस 5 पर मैंने एक दुर्घटना देखी। – Sam

+0

बहुत बहुत धन्यवाद! मैं पहले से ही एक हताश स्थिति में था क्योंकि मेरे पास SharePreferences पर जाने की कोशिश की हर तरह से NullPointerExceptions था। यह मेरे लिए हल हो गया! धन्यवाद! –

-1

मुझे लगता है कि यह null पॉइंटर नहीं है, लेकिन आपका फ़ंक्शन जिसे आप AppObject कक्षा में अगली बार उपयोग करना चाहते हैं, गलत हो सकता है।

+0

कृपया, समझाओ। आप ऐसा क्यों सोचते हैं? – naXa

+0

एक बार जब मैं कोड जांचता हूं और इस कारण को ढूंढता हूं, तो मैं आपकी गलती को पूरा करता हूं, मैं इस क्षेत्र में नया हूं और आशा करता हूं कि यह आपके लिए सहायक होगा। – user3641050

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