पर NullPointerException मैंने हाल ही में अपनी गतिविधियों को टुकड़ों में परिवर्तित कर दिया है।AsyncTask निष्पादित होने पर टुकड़ों को प्रतिस्थापित किया जा रहा है - getActivity()
टैब-नेविगेशन के समान कुछ का उपयोग करते समय टुकड़े बदल दिए जाते हैं जब उपयोगकर्ता एक और टैब चुनता है। टुकड़े आबादी के बाद इंटरनेट से कुछ जानकारी प्राप्त करने के लिए कम से कम एक AsyncTask शुरू करें। हालांकि - उपयोगकर्ता किसी अन्य टैब पर स्विच करता है, तो बस के रूप में मेरी AsyncTask से doBackground-विधि निष्पादित किया जा रहा है - टुकड़ा बदल दिया जाता है और इस तरह मैं चिह्नित लाइनों में एक NullPointerException
हो रही है:
@Override
protected Object doInBackground(Object... params) {
...
String tempjson = helper.SendPost(getResources().getText(R.string.apiid)); //ERROR: Fragment not attached
...
}
protected onPostExecute(Object result) {
...
getActivity().getContentResolver() //NULLPOINTEREXCEPTION
getView().findViewById(R.id.button) //NULL
...
}
getActivity()
और getResources()
एक त्रुटि का कारण बनता है क्योंकि मेरा टुकड़ा बदल दिया गया है।
बातें मैं कोशिश की है:
- कॉलिंग करता है, तो जाँच मेरी AsyncTask पर विधि को रद्द (प्रथम त्रुटि है और न ही दूसरा त्रुटि को ठीक नहीं होगा अगर टुकड़ा बदल दिया जाता है, जबकि
onPostExecute()
निष्पादित किया जाता है) getActivity()
null
याthis.isDetached()
बुला है (नहीं एक असली ठीक है और मैं इसे जाँच करने के लिए जब भी मैंgetActivity()
फोन और इतने पर आवश्यकता होगी)
तो मेरा सवाल है: इन AsyncTask समस्याओं से छुटकारा पाने के लिए सबसे अच्छा क्या होगा? मुझे क्रियाओं का उपयोग करके इन समस्याओं में कोई समस्या नहीं थी क्योंकि उन्हें टैब परिवर्तन पर "मार डाला"/अलग नहीं किया गया था (जिसके परिणामस्वरूप उच्च स्मृति उपयोग हुआ - कारण मैं फ्रैगमेंट्स पर स्विच करना चाहता हूं)
आप का उपयोग करना चाहिए isDetached() केवल तभी जब आप स्पष्ट रूप से खंड को अलग कर देते हैं। अन्यथा, आपको उन मामलों को संभालने के लिए Added() का उपयोग करना चाहिए जहां सिस्टम ने आपकी गतिविधि और आपके टुकड़े के बीच लिंक को नष्ट कर दिया था। – pcans
@ निकोले एलेंकोव कैसे जीवन चक्र निष्क्रियता को बुलाए जाने से पहले हर बार जांचने से बच सकता है? – Bear